#python #apache-spark #pyspark #group-by #apache-spark-sql
#python #apache-spark #pyspark #группировать по #apache-spark-sql
Вопрос:
У меня есть этот фрейм данных
--------- ------ ----- ------------- -----
| 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|
проблема в том, что функция суммы была рассчитана также для acron и acron_grouped
есть ли у вас какие-либо идеи, как я мог бы сделать группировку только для KWH / hh
Ответ №1:
Зависит от того, как вы хотите обрабатывать два других столбца. Если вы не хотите их суммировать, а просто хотите получить любое значение из этого столбца, вы можете сделать
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")
)
Комментарии:
1. остальные столбцы должны оставаться неизменными, поскольку для каждого LCLid есть фиксированный номер acron и Acorn_grouped
2. @eyabaklouti тогда вы также можете попробовать
dataset = dataset.groupBy("LCLid","Month","Acorn","Acorn_grouped").agg(F.sum("KWH/hh"))