如何创建一个包含 PySpark 中另一列给定范围内所有值的列
How to create a column with all the values in a range given by another column in 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 (UDF sample)
考虑你的 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")))
玩得开心!:)
试试这个。
定义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')))
输出
我在使用 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 (UDF sample) 考虑你的 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")))
玩得开心!:)
试试这个。
定义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')))
输出