【发布时间】:2021-12-27 17:04:19
【问题描述】:
请帮助我理解 PySpark
我有一个数据框,如何通过 PySpark 找到每个参数的总和?
+----+-----+-----+-----+-----+-----+-----+
|o_id|col_1|col_3|col_9|ser_1|ser_2|ser_9|
+----+-----+-----+-----+-----+-----+-----+
| 0| 103| 17| 73| c1| c2| c2|
| 1| 323| 245| 66| c2| c1| c3|
| 2| 112| 96| 1452| c3| c2| c1|
| 3| 46| 746| 4| c3| c2| c3|
| 4| 82| 379| 78| c1| c1| c2|
+----+-----+-----+-----+-----+-----+-----+
如何求所有出现的 c1 等的总和。
如何获得这种类型的数据透视表?
+----+-----+
| ser| sum|
+----+-----+
| c1| 2261|
| c2| 1333|
| c3| 228|
+----+-----+
如果列更少,那么我会很容易地做.groupby(),但是有很多列(更多),我不明白如何在不使用 python 循环的情况下对所有内容进行分组,这将显着降低代码速度。
df_1 = (df.groupby('ser_1').sum('col_1'))
...
df_x = (df.groupby('ser_x').sum('col_x'))
还有更优雅的解决方案吗?
【问题讨论】:
-
您能解释一下如何将
sum作为2261获得c1吗? -
ser_1 - 第一天的服务类型 col_1 - 相应的第一天服务的费用,所有服务的费用 ser_1 将等于
col_1 [0] + col_1 [4] + col_3 [1] + col_3 [4] + col_9 [2]而我不想为每对列手动创建一个单独的数据框df_1 = (df.groupby ('ser_1'). sum ('col_1')) ...也许有更好的方法来做到这一点。喜欢df_1 = (df.groupby (col (col ("ser_1) + col (" ser_2 "))). sum ((col (col (" col_1) + col ("col_2"))))但是栏目很多,我觉得这不是一个合理的解决方案。