2015-12-13 182 views
2

我有下列數據的火花數據幀(I使用火花CSV加載在數據):火花數據幀reducebykey像操作

key,value 
1,10 
2,12 
3,0 
1,20 

有任何類似的火花RDD reduceByKey其可以返回一個火花數據框爲:(基本上,總結了相同的密鑰值)

key,value 
1,30 
2,12 
3,0 

(我可以將數據轉化爲RDD並做了reduceByKey操作,但有一個更星火據幀API的方式來做到這一點?)

回答

8

如果你不關心你可以使用之後sumgroupBy列名:

df.groupBy($"key").sum("value") 

否則最好是更換sumagg

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") 
+0

謝謝。這真的很好。 –

+1

在RDD API中,我使用'reduceByKey',因爲'groupByKey'將一個密鑰的所有值都收集到內存中 - 如果一個密鑰與許多值關聯,工作人員可能會耗盡內存。 'groupBy'也有這個限制嗎? – jeffreyveon

+0

@jeffreyveon http://stackoverflow.com/q/32902982/1560062但是a)在Spark中存在多於一個實際的groupBy機制b)如果像操作一樣的聚合,它仍然有可能由於不同的原因而獲得OOM。 – zero323