在Spark的文档中,Aggregator:
抽象类聚合器[-IN, BUF, OUT] 扩展可序列化
用户定义聚合的基类,可以是
在数据集操作中用于获取组中的所有元素并
将它们减少到单个值。
用户定义的聚合函数是:
抽象类 UserDefinedAggregateFunction 扩展可序列化
实现用户定义聚合函数的基类
(UDAF)。
根据数据集聚合器 - Databricks http://docs.cloud.databricks.com/docs/spark/1.6/examples/Dataset%20Aggregator.html,“聚合器类似于 UDAF,但接口是用 JVM 对象而不是行来表示的。”
看起来这两个类很相似,除了接口中的类型之外,还有什么区别呢?
类似的问题是:UDAF 与 Spark 中聚合器的性能对比 https://stackoverflow.com/questions/45356452/performance-of-udaf-versus-aggregator-in-spark
除了类型之外,一个根本的区别是外部接口:
-
Aggregator
需要一个完整的Row
(它适用于“强”类型 API)。
-
UserDefinedAggregationFunction
需要一组Columns
.
这使得Aggregator
虽然整体 API 对用户更加友好,但灵活性较差。
处理状态也有区别:
-
Aggregator
是有状态的。取决于其缓冲区字段的可变内部状态。
-
UserDefinedAggregateFunction
是无国籍的。缓冲区的状态是外部的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)