首页 > 解决方案 > 如何在 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]|
    +--------------+-------------+-----------------------------+

标签: pysparkpyspark-sqlpyspark-dataframes

解决方案


尝试这个。

定义 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')))

输出

在此处输入图像描述


推荐阅读