pyspark - 如何在 PySpark 中的另一列给定的范围内创建包含所有值的列
问题描述
我在使用 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]|
+--------------+-------------+-----------------------------+
解决方案
尝试这个。
定义 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')))
输出