udf(用户定义函数)在pyspark中如何工作?

ash*_*h14 2 python user-defined-functions apache-spark pyspark

我想了解 udf 在 pyspark 中的工作原理。每次我们在数据框上使用 udf 时,Python shell 都会打开吗?

小智 6

UDF 可以通过两种方式提供给 PySpark。

  1. UDF 可以在 Scala 中定义并使用 PySpark 运行
  2. UDF可以在Python中定义并由PySpark运行

在第一种情况下,UDF 将作为 Executor JVM 本身的一部分运行,因为 UDF 本身是在 Scala 中定义的。不需要创建python进程。

在第二种情况下,每个执行器都会启动一个 python 进程。数据会在executor和python之间进行序列化和反序列化来处理。这会对 Spark 作业造成很大的性能影响和开销。

通常最好使用基于 Scala 的 UDF,因为它们会给您带来更好的性能。

在spark 2.x中有一个叫做Pandas Udf(向量化UDF)的东西。它们是使用 Pandas 实现的(使用 apache arrow 转换数据帧)。基本上你用 python 编写代码,但该代码使用 pandas 进行转换和运行。这极大地提高了 python 中 UDF 的性能。我希望这有帮助。