哪个选项使用 pyspark 提供最佳性能?使用地图进行 UDF 或 RDD 处理?
Posted
技术标签:
【中文标题】哪个选项使用 pyspark 提供最佳性能?使用地图进行 UDF 或 RDD 处理?【英文标题】:Which Option gives the best performance with pyspark ? An UDF or RDD processing with map? 【发布时间】:2020-06-26 12:11:11 【问题描述】:我正在使用 spark 结构化流处理数据,对于每个微批次,我将 DF 转换为 RDD,并执行一些 python graphkit 操作,然后再次将 RDD 转换为 DF 以写入 Kafka 流。
【问题讨论】:
【参考方案1】:我通常观察到 udf 比 rdd 映射更快。根据您的 python 版本,您可以使用 pandas udf,这肯定更快。参考这里:https://databricks.com/blog/2017/10/30/introducing-vectorized-udfs-for-pyspark.html
【讨论】:
我知道 pandas udf 更快。但是当您将 spark df 转换为 pandas df 时,它会将数据带到驱动程序节点。我觉得它不是分布式计算。 您不需要将其转换为 pandas。请参考链接中的示例 from pyspark.sql.functions import pandas_udf, PandasUDFType # 使用 pandas_udf 定义 Pandas UDF @pandas_udf('double', PandasUDFType.SCALAR) # 输入/输出都是 pandas.Series of doubles def pandas_plus_one( v): return v + 1 df.withColumn('v2', pandas_plus_one(df.v)) 所以pandas udf可以直接应用于spark数据帧。命名 pandas udf ,因为我们的列不是逐行执行,而是基于函数类型作为 pandas 系列或 pandas 数据帧处理以上是关于哪个选项使用 pyspark 提供最佳性能?使用地图进行 UDF 或 RDD 处理?的主要内容,如果未能解决你的问题,请参考以下文章
为啥有两个选项可以在 PySpark 中读取 CSV 文件?我应该使用哪一个?
避免在 pyspark 代码中使用 collect() 函数的最佳方法是啥?编写优化pyspark代码的最佳方法?