Spark Dataset聚合类似于RDD aggregate(zero)(accum, combiner)
Spark Dataset aggregation similar to RDD aggregate(zero)(accum, combiner)
RDD
有一个非常有用的方法 aggregate 允许用一些零值累加并跨分区组合它。有什么办法可以用 Dataset[T]
做到这一点吗?就我通过 Scala 文档看到的规范而言,实际上没有任何东西可以做到这一点。即使是 reduce 方法也只允许对以 T 作为两个参数的二元运算进行操作。有什么理由吗?如果有任何东西可以做同样的事情?
非常感谢!
VK
有两种不同的 类 可用于在 Dataset
中实现类似 aggregate
的行为 API:
UserDefinedAggregateFunction
使用 SQL
类型并采用 Columns
作为输入。
初始值使用 initialize
方法定义,seqOp
使用 update
方法定义,combOp
使用 merge
方法定义。
示例实现:
Aggregator
使用带有 Encoders
的标准 Scala 类型,并将记录作为输入。
初始值使用 zero
方法定义,seqOp
使用 reduce
方法定义,combOp
使用 merge
方法定义。
示例实现:
两者都提供额外的终结方法(分别为evaluate
和finish
),用于生成最终结果,可用于全局聚合和按键聚合。
RDD
有一个非常有用的方法 aggregate 允许用一些零值累加并跨分区组合它。有什么办法可以用 Dataset[T]
做到这一点吗?就我通过 Scala 文档看到的规范而言,实际上没有任何东西可以做到这一点。即使是 reduce 方法也只允许对以 T 作为两个参数的二元运算进行操作。有什么理由吗?如果有任何东西可以做同样的事情?
非常感谢!
VK
有两种不同的 类 可用于在 Dataset
中实现类似 aggregate
的行为 API:
UserDefinedAggregateFunction
使用SQL
类型并采用Columns
作为输入。初始值使用
initialize
方法定义,seqOp
使用update
方法定义,combOp
使用merge
方法定义。示例实现:
Aggregator
使用带有Encoders
的标准 Scala 类型,并将记录作为输入。初始值使用
zero
方法定义,seqOp
使用reduce
方法定义,combOp
使用merge
方法定义。示例实现:
两者都提供额外的终结方法(分别为evaluate
和finish
),用于生成最终结果,可用于全局聚合和按键聚合。