如何使用PySpark中另一列给定的范围内的所有值创建列

如何使用PySpark中另一列给定的范围内的所有值创建列,pyspark,pyspark-sql,pyspark-dataframes,Pyspark,Pyspark Sql,Pyspark Dataframes,我在使用PySpark 2.0版的以下场景中遇到了一个问题,我有一个带有列的数据帧,其中包含一个具有起始值和结束值的数组,例如。 [10001010] 我想知道如何创建和计算另一列,其中包含一个数组,该数组保存给定范围内的所有值?生成的范围值列的结果将是: +--------------+-------------+-----------------------------+ | Description| Accounts|

我在使用PySpark 2.0版的以下场景中遇到了一个问题,我有一个带有列的数据帧,其中包含一个具有起始值和结束值的数组,例如。
[10001010]

我想知道如何创建和计算另一列,其中包含一个数组,该数组保存给定范围内的所有值?生成的范围值列的结果将是:

    +--------------+-------------+-----------------------------+
    |   Description|     Accounts|                        Range|
    +--------------+-------------+-----------------------------+
    |       Range 1|   [101, 105]|    [101, 102, 103, 104, 105]|
    |       Range 2|   [200, 203]|         [200, 201, 202, 203]|
    +--------------+-------------+-----------------------------+
你应该使用自定义项 考虑一下你的PiSkice数据帧名称是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")))
您的解决方案如下:

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")))
玩得开心!:)

试试这个

定义udf 输出


我有下面链接中回答的相同要求,但需要pyspark中的代码。请将
df.printschema
的输出直接添加到您的问题()中。我已按上述方式执行,但它给出的模块错误如下所示。“ImportError:('No module named numpy',('numpy',)”numpy是一个python模块,您必须安装它才能在范围内显示结束值,我们需要在函数定义中的结束参数中添加+1。i、 e.end=a[1]+1