首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PySpark -对数据格式中的列进行求和,并以int形式返回结果

PySpark -对数据格式中的列进行求和,并以int形式返回结果
EN

Stack Overflow用户
提问于 2017-12-14 11:43:05
回答 9查看 156.2K关注 0票数 56

我有一列数字的电火花数据。我需要对该列进行求和,然后在python变量中将结果作为int返回。

代码语言:javascript
运行
复制
df = spark.createDataFrame([("A", 20), ("B", 30), ("D", 80)],["Letter", "Number"])

我做下面的总结这一栏。

代码语言:javascript
运行
复制
df.groupBy().sum()

但我得到了一份数据。

代码语言:javascript
运行
复制
+-----------+
|sum(Number)|
+-----------+
|        130|
+-----------+

我会把130作为一个int返回到一个变量中,以便在程序中的其他地方使用。

代码语言:javascript
运行
复制
result = 130
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2018-08-15 08:59:46

最简单的方法就是:

代码语言:javascript
运行
复制
df.groupBy().sum().collect()

但是这是非常慢的操作:避免groupByKey,您应该使用RDD和reduceByKey:

代码语言:javascript
运行
复制
df.rdd.map(lambda x: (1,x[1])).reduceByKey(lambda x,y: x + y).collect()[0][1]

我尝试了一个更大的数据集,并测量了处理时间:

RDD和ReduceByKey:2.23 s

GroupByKey: 30.5秒

票数 37
EN

Stack Overflow用户

发布于 2018-05-22 12:00:08

我认为最简单的方法是:

代码语言:javascript
运行
复制
df.groupBy().sum().collect()

将返回一个列表。在你的例子中:

代码语言:javascript
运行
复制
In [9]: df.groupBy().sum().collect()[0][0]
Out[9]: 130
票数 47
EN

Stack Overflow用户

发布于 2019-10-14 13:14:08

如果您想要一个特定的列:

代码语言:javascript
运行
复制
import pyspark.sql.functions as F     

df.agg(F.sum("my_column")).collect()[0][0]
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47812526

复制
相关文章

相似问题

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