gpt4 book ai didi

python - PySpark UDF 返回可变大小的元组

转载 作者:行者123 更新时间:2023-11-28 17:10:08 25 4
gpt4 key购买 nike

我使用现有的 Dataframe 并创建一个包含元组字段的新 Dataframe。 UDF 用于生成此字段。例如,在这里,我采用源元组并修改其元素以生成一个新元素:

udf( lambda x: tuple([2*e for e in x], ...)

挑战在于元组的长度事先不可知,并且可以逐行更改。

根据我阅读相关讨论的理解,要返回元组,UDF 的返回类型必须声明为 StructType。但是,由于返回的元组中元素的数量是未知的,我不能只写这样的东西:

StructType([
StructField("w1", IntegerType(), False),
StructField("w2", IntegerType(), False),
StructField("w3", IntegerType(), False)])

似乎可以返回列表,但列表对我不起作用,因为我需要在输出 Dataframe 中有一个可哈希对象。

我有哪些选择?

提前致谢

最佳答案

StructType/Row 表示固定大小 product type对象,不能用于表示可变大小的对象。

要表示同类集合,请使用 list 作为外部类型,并使用 ArrayType 作为 SQL 类型:

udf(lambda x: [2*e for e in x], ArrayType(IntegerType()))

或(Spark 2.2 或更高版本):

udf(lambda x: [2*e for e in x], "array<integer>")

在 Spark 2.4 或更高版本中,您可以使用 transform

from pyspark.sql.functions import expr

expr("tranform(input_column, x -> 2 * x)")

关于python - PySpark UDF 返回可变大小的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48178039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com