Как создать столбец со всеми значениями в диапазоне, заданном другим столбцом в PySpark - PullRequest
0 голосов
/ 03 ноября 2019

У меня проблема со следующим сценарием, использующим PySpark версии 2.0, у меня есть DataFrame со столбцом, содержащим массив с начальным и конечным значением, например, [1000, 1010]

Я хотел бы знать, как создатьи вычислить другой столбец, который содержит массив, который содержит все значения для данного диапазона? результат сгенерированного столбца значений диапазона будет:

    +--------------+-------------+-----------------------------+
    |   Description|     Accounts|                        Range|
    +--------------+-------------+-----------------------------+
    |       Range 1|   [101, 105]|    [101, 102, 103, 104, 105]|
    |       Range 2|   [200, 203]|         [200, 201, 202, 203]|
    +--------------+-------------+-----------------------------+

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Попробуйте это.

определить udf

def range_value(a):
    start = a[0]
     end = a[1] +1 
     return list(range(start,end))

from pyspark.sql import functions as F
from pyspark.sql import types as pt

df = spark.createDataFrame([("Range 1", list([101,105])), ("Range 2", list([200, 203]))],("Description", "Accounts"))

range_value= F.udf(range_value, pt.ArrayType(pt.IntegerType()))
df = df.withColumn('Range', range_value(F.col('Accounts')))

Вывод

enter image description here

0 голосов
/ 03 ноября 2019

вам следует использовать UDF (образец UDF) Учтите, что ваше имя фрейма данных pyspark равно df, ваш фрейм данных может выглядеть следующим образом:

df = spark.createDataFrame(
[("Range 1", list([101,105])), 
 ("Range 2", list([200, 203]))],
("Description", "Accounts"))

И ваше решение выглядит следующим образом:

import pyspark.sql.functions as F
import numpy as np

def make_range_number(arr):
    number_range = np.arange(arr[0], arr[1]+1, 1).tolist()
    return number_range

range_udf = F.udf(make_range_number)

df = df.withColumn("Range", range_udf(F.col("Accounts")))

Приятного времяпровождения! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...