我有一个包含以下数据的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方法呢?)
发布于 2015-12-13 20:35:06
如果您不关心列名,可以先使用groupBy,然后再使用sum
df.groupBy($"key").sum("value")否则,最好用agg替换sum
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")发布于 2019-07-11 14:16:59
我认为用户goks遗漏了代码中的某些部分。这不是一个经过测试的代码。
应该使用.map将rdd转换为使用.map(lambda x:(X,1)) pairRDD的.reduceByKey。……
除了pairRDD之外,reduceByKey在单值rdd或常规rdd上不可用。
Thx
发布于 2018-08-25 02:53:12
这个怎么样?我同意这仍然会转换为rdd,然后转换为dataframe。
df.select('key','value').map(lambda x: x).reduceByKey(lambda a,b: a+b).toDF(['key','value'])https://stackoverflow.com/questions/34249841
复制相似问题