python - 如何使用 pyspark 仅按特定功能进行分组
问题描述
我有这个数据框
+---------+------+-----+-------------+-----+
| LCLid|KWH/hh|Acorn|Acorn_grouped|Month|
+---------+------+-----+-------------+-----+
|MAC000002| 0.0| 0| 0| 10|
|MAC000002| 0.0| 0| 0| 10|
|MAC000002| 0.0| 0| 0| 10|
我只想以某种方式按 LCid 和月平均消费量进行分组
+---------+-----+------------------+----------+------------------+
| LCLid|Month| sum(KWH/hh)|Acorn |Acorn_grouped |
+---------+-----+------------------+----------+------------------+
|MAC000003| 10| 904.9270009999999| 0 | 0 |
|MAC000022| 2|1672.5559999999978| 1 | 0 |
|MAC000019| 4| 368.4720001000007| 1 | 1 |
|MAC000022| 9|449.07699989999975| 0 | 1 |
|MAC000024| 8| 481.7160003000004| 1 | 0 |
但我能做的是使用这段代码
dataset=dataset.groupBy("LCLid","Month").sum()
这给了我这个结果
+---------+-----+------------------+----------+------------------+----------+
| LCLid|Month| sum(KWH/hh)|sum(Acorn)|sum(Acorn_grouped)|sum(Month)|
+---------+-----+------------------+----------+------------------+----------+
|MAC000003| 10| 904.9270009999999| 2978| 2978| 29780|
|MAC000022| 2|1672.5559999999978| 12090| 4030| 8060|
|MAC000019| 4| 368.4720001000007| 20174| 2882| 11528|
|MAC000022| 9|449.07699989999975| 8646| 2882| 25938|
问题是 sum 函数也是在 acron 和 acron_grouped 上计算的,你知道我怎么能只在 KWH/hh 上进行分组
解决方案
取决于您要如何处理其他两列。如果您不想对它们求和,而只想从该列中获取任何值,您可以这样做
import pyspark.sql.functions as F
dataset = dataset.groupBy("LCLid","Month").agg(
F.sum("KWH/hh"),
F.first("Acorn").alias("Acorn"),
F.first("Acorn_grouped").alias("Acorn_grouped")
)
推荐阅读
- python - 我不想硬编码要打开的文件('Besties.txt')
- sql - 在放慢日常工作的同时
- reactjs - 使用带有订阅部分的部分标记内的 amp-video-iframe 会导致错误
- sql - 从数组中的数组中提取值并将其格式化为行
- go - 如何创建自定义工作流定义?
- python - 如何在浏览器中重定向/渲染 Pyodide 输出?
- android - 看不到进度条
- sql-server - 可以通过pyodbc和SELECT语句访问数据,但是SQL中没有新表出现
- angular - 无法在Angular中读取组件的html文件中的变量
- python - 我似乎无法在循环中偏移迭代器