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

时间:2018-11-26 08:50:13

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

我想了解uds在pyspark中的工作。每当我们在数据框顶部使用udf时,Python外壳会打开吗?

2 个答案:

答案 0 :(得分:2)

Spark与每个执行程序并行运行一个python进程,并在Scala部分(执行程序)和python之间来回传递数据。

这对性能和内存消耗(以及在调整Spark作业时对其进行管理)有很多影响

答案 1 :(得分:0)

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

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

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

在第二种情况下,对于每个执行程序,将启动python进程。数据将在执行程序和python之间进行序列化和反序列化以进行处理。这会导致大量的性能影响以及火花作业的开销。

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

在spark 2.x中有一个叫做Pandas Udf(矢量化UDF)的东西。它们使用Pandas(使用apache箭头转换Dataframe)实现。基本上,您使用python编写代码,但是该代码已转换并使用pandas运行。大大提高了python中UDF的性能。 我希望这会有所帮助。