gpt4 book ai didi

python - 何时在 PySpark 中使用 UDF 与函数?

转载 作者:行者123 更新时间:2023-12-01 00:58:15 24 4
gpt4 key购买 nike

我将 Spark 与 Databricks 结合使用,并具有以下代码:

def replaceBlanksWithNulls(column):
return when(col(column) != "", col(column)).otherwise(None)

下面这两个语句都有效:

x = rawSmallDf.withColumn("z", replaceBlanksWithNulls("z"))

并使用 UDF:

replaceBlanksWithNulls_Udf = udf(replaceBlanksWithNulls)
y = rawSmallDf.withColumn("z", replaceBlanksWithNulls_Udf("z"))

我不清楚 documentation我什么时候应该使用其中一种而不是另一种,为什么?

最佳答案

UDF 本质上可以是任何类型的函数(当然也有异常(exception)) - 没有必要使用 Spark 结构,例如 when col 等。通过使用 UDFreplaceBlanksWithNulls 函数可以编写为普通的 Python 代码:

def replaceBlanksWithNulls(s):
return "" if s != "" else None

注册后可以在数据框列上使用:

replaceBlanksWithNulls_Udf = udf(replaceBlanksWithNulls)
y = rawSmallDf.withColumn("z", replaceBlanksWithNulls_Udf("z"))

注意:UDF 的默认返回类型是字符串。如果需要其他类型,则必须在注册时指定,例如

from pyspark.sql.types import LongType
squared_udf = udf(squared, LongType())
<小时/>

在这种情况下,列操作并不复杂,并且 Spark 函数可以实现相同的功能(即问题中的 replaceBlanksWithNulls:

x = rawSmallDf.withColumn("z", when(col("z") != "", col("z")).otherwise(None))

只要有可能,这总是首选,因为它允许 Spark 优化查询,请参阅例如Spark functions vs UDF performance?

关于python - 何时在 PySpark 中使用 UDF 与函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050825/

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