【问题标题】:How to get a total count based on distinction of two columns with PySpark?如何使用 PySpark 根据两列的区别来获得总计数?
【发布时间】:2021-05-09 12:21:51
【问题描述】:
如何在 PySpark 中根据不同的 ID 和位置 对 频率 进行求和?
感觉我需要按 ID 和 Location 进行窗口分区,然后添加频率,但不知道如何在 Pyspark 代码中编写:
输入
| ID |
Location |
Frequency |
| AAA |
Mcd |
2 |
| AAA |
Mcd |
1 |
| BBB |
Nandos |
1 |
| BBB |
Nandos |
3 |
| AAA |
KFC |
2 |
| BBB |
KFC |
4 |
输出
| ID |
Location |
Total Frequency |
| AAA |
Mcd |
3 |
| AAA |
KFC |
2 |
| BBB |
Nandos |
4 |
| BBB |
KFC |
4 |
【问题讨论】:
标签:
python
sql
apache-spark
pyspark
apache-spark-sql
【解决方案1】:
我认为你可以使用GroupBy 函数。
yourInput.groupBy("ID",Location).sum("Frequency").alias("TotalFrequency").show(truncate=False)
注意:请查看 pyspark Link of Aggregate Functions中的聚合函数链接
【解决方案2】:
只是一个简单的分组和求和:
import pyspark.sql.functions as F
df2 = df.groupBy('ID', 'Location').agg(F.sum('Frequency').alias('TotalFrequency'))
【解决方案3】:
首先将数据框制作成表,然后您可以从该表中查询,然后您可以使用普通查询
dataframe.createOrReplaceTempView("mytable")
"select id, location, sum(Frequency) from mytable
group by id, location"