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 方法定义。

    示例实现:

两者都提供额外的终结方法(分别为evaluatefinish),用于生成最终结果,可用于全局聚合和按键聚合。