我想了解uds在pyspark中的工作。每当我们在数据框顶部使用udf时,Python外壳会打开吗?
答案 0 :(得分:2)
Spark与每个执行程序并行运行一个python进程,并在Scala部分(执行程序)和python之间来回传递数据。
这对性能和内存消耗(以及在调整Spark作业时对其进行管理)有很多影响
答案 1 :(得分:0)
UDF可以通过两种方式提供给PySpark。
在第一种情况下,UDF将作为Executor JVM本身的一部分运行,因为UDF本身是在Scala中定义的。无需创建python进程。
在第二种情况下,对于每个执行程序,将启动python进程。数据将在执行程序和python之间进行序列化和反序列化以进行处理。这会导致大量的性能影响以及火花作业的开销。
通常最好使用基于Scala的UDF,因为它们会为您提供更好的性能。
在spark 2.x中有一个叫做Pandas Udf(矢量化UDF)的东西。它们使用Pandas(使用apache箭头转换Dataframe)实现。基本上,您使用python编写代码,但是该代码已转换并使用pandas运行。大大提高了python中UDF的性能。 我希望这会有所帮助。