在 PySpark DataFrame 中将汇总输出添加为新行
Add output of rollup as a new row in a PySpark DataFrame
我正在将 sql 代码转换为 Pyspark。
sql 代码使用汇总来汇总每个州的计数。
我正在尝试在 pyspark 中做同样的事情,但不知道如何获取总计数行。
我有一个包含州、城市和计数的 table,我想在州部分的末尾添加每个州的总计数。
这是示例输入:
State City Count
WA Seattle 10
WA Tacoma 11
MA Boston 11
MA Cambridge 3
MA Quincy 5
这是我想要的输出:
State City Count
WA Seattle 10
WA Tacoma 11
WA Total 21
MA Boston 11
MA Cambridge 3
MA Quincy 5
MA Total 19
我不知道如何添加状态之间的总数。
我试过汇总,这是我的代码:
df2=df.rollup('STATE').count()
结果显示如下:
State Count
WA 21
MA 19
但我想要每个州之后的总计。
或者:
df.groubpBy("State", "City").rollup(count("*"))
或者直接注册 table:
df.createOrReplaceTempView("df")
并应用您当前的 SQL 查询
spark.sql("...")
由于您希望 Total
作为 DataFrame 中的新行,一种选择是合并 groupBy()
的结果并按 ["State", "City", "Count"]
排序(以确保 "Total"
行显示在每个组的最后):
import pyspark.sql.functions as f
df.union(
df.groupBy("State")\
.agg(f.sum("Count").alias("Count"))\
.select("State", f.lit("Total").alias("City"), "Count")
).sort("State", "City", "Count").show()
#+-----+---------+-----+
#|State| City|Count|
#+-----+---------+-----+
#| MA| Boston| 11|
#| MA|Cambridge| 3|
#| MA| Quincy| 5|
#| MA| Total| 19|
#| WA| Seattle| 10|
#| WA| Tacoma| 11|
#| WA| Total| 21|
#+-----+---------+-----+
我正在将 sql 代码转换为 Pyspark。
sql 代码使用汇总来汇总每个州的计数。
我正在尝试在 pyspark 中做同样的事情,但不知道如何获取总计数行。
我有一个包含州、城市和计数的 table,我想在州部分的末尾添加每个州的总计数。
这是示例输入:
State City Count
WA Seattle 10
WA Tacoma 11
MA Boston 11
MA Cambridge 3
MA Quincy 5
这是我想要的输出:
State City Count
WA Seattle 10
WA Tacoma 11
WA Total 21
MA Boston 11
MA Cambridge 3
MA Quincy 5
MA Total 19
我不知道如何添加状态之间的总数。
我试过汇总,这是我的代码:
df2=df.rollup('STATE').count()
结果显示如下:
State Count
WA 21
MA 19
但我想要每个州之后的总计。
或者:
df.groubpBy("State", "City").rollup(count("*"))
或者直接注册 table:
df.createOrReplaceTempView("df")
并应用您当前的 SQL 查询
spark.sql("...")
由于您希望 Total
作为 DataFrame 中的新行,一种选择是合并 groupBy()
的结果并按 ["State", "City", "Count"]
排序(以确保 "Total"
行显示在每个组的最后):
import pyspark.sql.functions as f
df.union(
df.groupBy("State")\
.agg(f.sum("Count").alias("Count"))\
.select("State", f.lit("Total").alias("City"), "Count")
).sort("State", "City", "Count").show()
#+-----+---------+-----+
#|State| City|Count|
#+-----+---------+-----+
#| MA| Boston| 11|
#| MA|Cambridge| 3|
#| MA| Quincy| 5|
#| MA| Total| 19|
#| WA| Seattle| 10|
#| WA| Tacoma| 11|
#| WA| Total| 21|
#+-----+---------+-----+