Pyspark - 一次聚合数据帧的所有列

ALE*_*HEW 4 r aggregate-functions apache-spark pyspark

我想将数据框分组到单个列上,然后对所有列应用聚合函数。

例如,我有一个包含 10 列的 df。我希望对第一列“1”进行分组,然后对所有剩余列(均为数字)应用聚合函数“sum”。

与此等效的 R 是 summarise_all。前在R。

df = df%>%group_by(column_one)%>%summarise_all(funs(sum))

Run Code Online (Sandbox Code Playgroud)

我不想在 pyspark 的聚合命令中手动输入列,因为数据框中的列数是动态的。

Sha*_*han 9

这是 pyspark 的示例:

df = spark.createDataFrame([(1,10,20,30),(1,10,20,30),(1,10,20,30)],['id','value1','value2','value3'])

exprs = {x: "sum" for x in df.columns if x is not df.columns[0]}

df.groupBy("id").agg(exprs).show()

#+---+-----------+-----------+-----------+
#| id|sum(value2)|sum(value1)|sum(value3)|
#+---+-----------+-----------+-----------+
#|  1|         60|         30|         90|
#+---+-----------+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)

这里df.columns[0]代表 的第一列df。您还可以按名称指定 groupBy 列,如下所示。

exprs = {x: "sum" for x in df.columns if x is not 'id'}
Run Code Online (Sandbox Code Playgroud)

  • 您将如何为每一列指定与其原始名称相同的别名?例如:该列将被别名为“value2”,而不是“sum(value2)” (2认同)