在Spark中,DataFrame API中的RDD是否有等效的gregationByKey方法可用?
答案 0 :(得分:2)
DataFrame接口中的大多数常用聚合操作都可以通过agg
和已经定义的聚合器来完成,例如sum
,first
,max
等。如果您要进行类似GROUP BY
和聚合, la SQL的操作,应该先研究那些现有的聚合函数。
aggregateByKey
方法公开了更复杂的逻辑,但是,它使您可以实现一些复杂的聚合例程。如果您想这样做,则需要使用Dataset接口,该接口与您已经从RDD中使用的接口非常相似。具体来说,请考虑创建一个自定义聚合器:
https://docs.databricks.com/spark/latest/spark-sql/udaf-scala.html
在那里,您定义了诸如initialize
,merge
之类的聚合器方法,这些方法指定如何创建聚合器,将各个元素合并到聚合中以及将跨执行者/任务的中间聚合合并在一起。
定义了聚合器后,您可以在数据集上使用它,例如
ds.groupBy(_.myKey).agg(myCustomAggregator)