如何在pyspark数据帧中对列的值求和

时间:2018-02-01 17:09:55

标签: apache-spark dataframe sum pyspark

我在Pyspark工作,我有一个包含以下列的数据框。

Q1 = spark.read.csv("Q1final.csv",header = True, inferSchema = True)
Q1.printSchema()

root
|-- index_date: integer (nullable = true)
|-- item_id: integer (nullable = true)
|-- item_COICOP_CLASSIFICATION: integer (nullable = true)
|-- item_desc: string (nullable = true)
|-- index_algorithm: integer (nullable = true)
|-- stratum_ind: integer (nullable = true)
|-- item_index: double (nullable = true)
|-- all_gm_index: double (nullable = true)
|-- gm_ra_index: double (nullable = true)
|-- coicop_weight: double (nullable = true)
|-- item_weight: double (nullable = true)
|-- cpih_coicop_weight: double (nullable = true)

我需要将最后一列(cpih_coicop_weight)中所有元素的总和用作程序其他部分的Double。我该怎么做? 非常感谢你提前!

3 个答案:

答案 0 :(得分:6)

如果您只希望将double或int作为返回值,则以下函数将起作用:

def sum_col(df, col):
    return df.select(F.sum(col)).collect()[0][0]

然后

sum_col(Q1, 'cpih_coicop_weight')

将返回总和。 我是pyspark的新手,所以我不确定为什么库中没有这种简单的列对象方法。

答案 1 :(得分:1)

试试这个:

from pyspark.sql import functions as F
total = Q1.groupBy().agg(F.sum("cpih_coicop_weight")).collect()

total中,您应该得到结果。

答案 2 :(得分:0)

这也可以尝试。

total = Q1.agg(F.sum("cpih_coicop_weight")).collect()