我在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。我该怎么做? 非常感谢你提前!
答案 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()