Spark 中 UDAF 与聚合器的性能对比
Posted
技术标签:
【中文标题】Spark 中 UDAF 与聚合器的性能对比【英文标题】:Performance of UDAF versus Aggregator in Spark 【发布时间】:2018-01-03 12:25:13 【问题描述】:我正在尝试在 Spark 中编写一些注重性能的代码,并且想知道是否应该为 Dataframe 上的汇总操作编写 Aggregator 或 User-defined Aggregate Function (UDAF)。
我无法在任何地方找到任何有关这些方法的速度以及您应该在 spark 2.0+ 中使用哪种方法的数据。
【问题讨论】:
您在考虑什么“汇总操作”? Spark SQL 已经支持rollup
聚合。
@JacekLaskowski 嗨,Jacek,这就是我的意思,使用 rollup
但带有自定义聚合函数。
【参考方案1】:
您应该将Aggregator
写成UserDefinedAggregateFunction
performs inefficient serialization/deserialization tasks for each row 而不是UserDefinedAggregateFunction
。将UserDefinedAggregateFunction
重写为Aggregator
可以将性能从25%-30% 提高到100 倍,如in pull request replacing UserDefinedAggregateFunction
with Aggregator
所述
由于这些性能问题,UserDefinedAggregateFunction
class has been deprecated in Spark 3.0
【讨论】:
以上是关于Spark 中 UDAF 与聚合器的性能对比的主要内容,如果未能解决你的问题,请参考以下文章
Spark Window 聚合与 Group By/Join 性能