如何在 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 的情况,例如,现在它们不适用于MapType
、TimestampType
的数组和嵌套的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 异常