Spark:聚合器和UDAF之间有什么区别?

6
在Spark文档中,聚合器(Aggregator)是:
抽象类Aggregator[-IN, BUF, OUT]扩展自Serializable。它是用户定义聚合的基类,可用于数据集操作中,将一组元素缩减为单个值。
UserDefinedAggregateFunction是:
抽象类UserDefinedAggregateFunction扩展自Serializable。它是实现用户定义聚合函数(UDAF)的基类。
根据Dataset Aggregator - Databricks,“聚合器类似于UDAF,但接口是以JVM对象而不是Row表示的。”
除了接口中的类型之外,这两个类似乎非常相似,还有哪些区别?
一个类似的问题是:Performance of UDAF versus Aggregator in Spark
1个回答

8

除了类型之外,一个基本的区别是外部接口:

  • Aggregator 接受完整的 Row(它适用于“强类型”API)。
  • UserDefinedAggregationFunction 接受一组 Columns

这使得 Aggregator 不太灵活,尽管总体API更加用户友好。

在处理状态方面也有所不同:

  • Aggregator 是有状态的。取决于其缓冲字段的可变内部状态。
  • UserDefinedAggregateFunction 是无状态的。缓冲区的状态是外部的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接