我想了解 udf 在 pyspark 中的工作原理。每次我们在数据帧上使用 udf 时,python shell 是否会打开?
UDF 可以通过两种方式提供给 PySpark。
在第一种情况下,UDF 将作为 Executor JVM 本身的一部分运行,因为 UDF 本身是在 Scala 中定义的。无需创建python进程。
在第二种情况下,每个执行程序都会启动一个 python 进程。数据将在 executor 和 python 之间序列化和反序列化以进行处理。这会导致大量的性能影响和火花作业的开销。
通常首选使用基于 Scala 的 UDF,因为它们会给你更好的性能。
在 spark 2.x 中有一种叫做 Pandas Udf(矢量化 UDF)的东西。它们是使用 Pandas 实现的(使用 apache 箭头转换数据帧)。基本上你用python编写代码,但该代码被转换并使用pandas运行。这大大提高了python中UDF的性能。我希望这有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句