我有一个带有以下数据的Spark数据帧(我使用spark-csv来加载数据):
key,value
1,10
2,12
3,0
1,20
有什么类似于spark RDD reduceByKey
可以返回Spark DataFrame :(基本上,总结相同的键值)
key,value
1,30
2,12
3,0
(我可以将数据转换为RDD并执行reduceByKey
操作,但是有更多Spark DataFrame API方法可以执行此操作吗?)
如果您不关心列名,可以使用groupBy
后跟sum
:
df.groupBy($"key").sum("value")
否则最好更换sum
为agg
:
df.groupBy($"key").agg(sum($"value").alias("value"))
最后你可以使用原始SQL:
df.registerTempTable("df") sqlContext.sql("SELECT key, SUM(value) AS value FROM df GROUP BY key")
另请参见DataFrame/Dataset groupBy行为/优化