【发布时间】:2018-11-26 08:50:12
【问题描述】:
我想了解 udf 在 pyspark 中的工作原理。每次我们在数据帧上使用 udf 时都会打开一个 python shell 吗?
【问题讨论】:
标签: python apache-spark pyspark user-defined-functions
我想了解 udf 在 pyspark 中的工作原理。每次我们在数据帧上使用 udf 时都会打开一个 python shell 吗?
【问题讨论】:
标签: python apache-spark pyspark user-defined-functions
UDF 可以通过 2 种方式提供给 PySpark。
在第一种情况下,UDF 将作为 Executor JVM 本身的一部分运行,因为 UDF 本身是在 Scala 中定义的。无需创建python进程。
在第二种情况下,每个执行器都会启动一个 python 进程。数据将在 executor 和 python 之间进行序列化和反序列化以进行处理。这会导致 Spark 作业的大量性能影响和开销。
通常最好使用基于 Scala 的 UDF,因为它们会给您带来更好的性能。
在 spark 2.x 中有一种叫做 Pandas Udf(矢量化 UDF)的东西。它们是使用 Pandas 实现的(使用 apache 箭头转换数据框)。基本上你用 python 编写代码,但是代码是使用 pandas 转换和运行的。这极大地提高了 Python 中 UDF 的性能。 我希望这会有所帮助。
【讨论】:
Spark 运行一个与每个执行器并行的 python 进程,并在 Scala 部分(执行器)和 python 之间来回传递数据。
这对性能和内存消耗(以及调整 spark 作业时的管理)有很多影响
【讨论】: