udf(用户定义函数)如何在 pyspark 中工作?
Posted
技术标签:
【中文标题】udf(用户定义函数)如何在 pyspark 中工作?【英文标题】:How does udf (user defined function) work in pyspark? 【发布时间】:2018-11-26 08:50:12 【问题描述】:我想了解 udf 在 pyspark 中的工作原理。每次我们在数据帧上使用 udf 时都会打开一个 python shell 吗?
【问题讨论】:
【参考方案1】:UDF 可以通过 2 种方式提供给 PySpark。
-
UDF 可以在 Scala 中定义并使用 PySpark 运行
UDF 可以在 Python 中定义并由 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 的性能。 我希望这会有所帮助。
【讨论】:
【参考方案2】:Spark 运行一个与每个执行器并行的 python 进程,并在 Scala 部分(执行器)和 python 之间来回传递数据。
这对性能和内存消耗(以及调整 spark 作业时的管理)有很多影响
【讨论】:
以上是关于udf(用户定义函数)如何在 pyspark 中工作?的主要内容,如果未能解决你的问题,请参考以下文章