首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark dataframe reducebykey like操作

Spark dataframe reducebykey like操作
EN

Stack Overflow用户
提问于 2015-12-13 17:53:32
回答 3查看 28.9K关注 0票数 11

我有一个包含以下数据的Spark数据帧(我使用spark-csv加载数据):

代码语言:javascript
复制
key,value
1,10
2,12
3,0
1,20

有没有类似于spark RDD reduceByKey的东西,它可以返回Spark DataFrame为:(基本上,对相同的键值进行求和)

代码语言:javascript
复制
key,value
1,30
2,12
3,0

(我可以将数据转换为RDD并执行reduceByKey操作,但是有没有更好的Spark DataFrame API方法呢?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-13 20:35:06

如果您不关心列名,可以先使用groupBy,然后再使用sum

代码语言:javascript
复制
df.groupBy($"key").sum("value")

否则,最好用agg替换sum

代码语言:javascript
复制
df.groupBy($"key").agg(sum($"value").alias("value"))

最后,您可以使用原始SQL:

代码语言:javascript
复制
df.registerTempTable("df")
sqlContext.sql("SELECT key, SUM(value) AS value FROM df GROUP BY key")

另请参阅DataFrame / Dataset groupBy behaviour/optimization

票数 22
EN

Stack Overflow用户

发布于 2019-07-11 14:16:59

我认为用户goks遗漏了代码中的某些部分。这不是一个经过测试的代码。

应该使用.map将rdd转换为使用.map(lambda x:(X,1)) pairRDD的.reduceByKey。……

除了pairRDD之外,reduceByKey在单值rdd或常规rdd上不可用。

Thx

票数 2
EN

Stack Overflow用户

发布于 2018-08-25 02:53:12

这个怎么样?我同意这仍然会转换为rdd,然后转换为dataframe。

代码语言:javascript
复制
df.select('key','value').map(lambda x: x).reduceByKey(lambda a,b: a+b).toDF(['key','value'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34249841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档