【问题标题】:When is it appropriate to use a UDF vs using spark functionality? [closed]什么时候使用 UDF 与使用 spark 功能比较合适? [关闭]
【发布时间】:2021-01-26 18:53:09
【问题描述】:

在过去的几周里,我一直在通过我为工作所做的所有测试来扩展我对 spark 的了解,但我有点困惑什么时候适合使用 A UDF,什么时候不适合。查看一些同行代码,他们在使用数据帧时使用了很多UDF,但它们非常耗费资源。因为我重构了他们的很多代码,所以我使用spark.sql() 重写了很多代码,而且速度更快,而且我只使用 spark 功能。话虽如此,何时使用 UDF 与仅使用 spark 的内置功能比较合适?

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql user-defined-functions


    【解决方案1】:

    其实很简单:建议尽可能依赖 Spark 的内置函数,仅在使用内置函数无法完成转换时才使用 UDF。

    Spark 的 Catalyst 优化器无法优化 UDF,因此性能总是有可能下降。 UDF 很昂贵,因为它们强制将数据表示为 JVM 中的对象。

    由于您还使用了标签 [pyspark],并且正如下面评论中提到的,“Panda UDF”(又名矢量化 UDF)可能会避免 JVM 和 Python 之间的数据移动。相反,他们使用 Apache Arrow 来传输数据并使用 Pandas 来处理它。您可以通过 pandas_udf 使用 Panda UDF,并在 Databricks 博客 Introducing Pandas UDF for PySpark 中阅读更多相关信息,该博客有一个关于性能比较的专门部分。

    您的同行可能使用了许多 UDF,因为内置函数在早期版本的 Spark 中不可用。每个版本都会添加更多功能。

    【讨论】:

    • 并且更喜欢在 pyspark 中使用 pandas_udf,因为它们比 udfs 更高效
    • @blackbishop,谢谢你提到这个!这确实应该得到解决,我已将其添加到我的答案中。
    猜你喜欢
    • 2010-10-22
    • 2015-02-11
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多