如何在 pyspark.sql.functions.pandas_udf 和 pyspark.sql.functions.udf 之间进行选择?

Posted

技术标签:

【中文标题】如何在 pyspark.sql.functions.pandas_udf 和 pyspark.sql.functions.udf 之间进行选择?【英文标题】:How to choose between pyspark.sql.functions.pandas_udf and pyspark.sql.functions.udf? 【发布时间】:2020-12-19 00:00:44 【问题描述】:

我了解当涉及矢量化时,pyspark.sql.functions.pandas_udf 会比pyspark.sql.functions.udf 快。

但是如果不涉及矢量化怎么办,两者的性能应该相似吗?在两者之间进行选择是否有任何指导原则?

【问题讨论】:

【参考方案1】:

Pandas UDF 在大多数情况下应该更快,主要是因为 Spark JVM 和 Python 进程之间的数据编码更有效,因此建议尽可能使用 Pandas UDF。

“正常”UDF 可用于Pandas UDFs couldn't be used 的情况,例如,现在它们不适用于MapTypeTimestampType 的数组和嵌套的StructType

附:此外,在使用 PySpark 时,评估 Koalas 的使用可能是有意义的。在我自己的测试中,Koalas 比使用 Pandas UDF 的类似代码快约 2 倍,尽管精心编写的 PySpark 代码仍然更快。

【讨论】:

以上是关于如何在 pyspark.sql.functions.pandas_udf 和 pyspark.sql.functions.udf 之间进行选择?的主要内容,如果未能解决你的问题,请参考以下文章

如何在字典中使用 pyspark.sql.functions.when() 的多个条件?

pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别

SparkSession 中的 udf 和 pyspark.sql.functions 中的 udf 有啥区别

在 Spark 2.4 上的 pyspark.sql.functions.max().over(window) 上使用 .where() 会引发 Java 异常

如何从 pyspark.sql.function 中提取值?

向数据框添加索引。 Pyspark 2.4.4 [重复]