首页 文章

将汇总输出添加为PySpark DataFrame中的新行

提问于
浏览
0

我正在将sql代码转换为Pyspark .

sql代码使用汇总来总结每个状态的计数 .

我试着在pyspark中做同样的事情,但不知道如何获得总计数行 .

我有一个包含州,城市和计数的表格,我想在州部分的末尾添加每个州的总计数 .

这是一个示例输入:

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

但我希望在每个州之后获得总计 .

2 回答

  • 1

    由于您希望 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|
    #+-----+---------+-----+
    
  • -2

    或者:

    df.groubpBy("State", "City").rollup(count("*"))
    

    或者只是注册表:

    df.createOrReplaceTempView("df")
    

    并应用您当前的SQL查询

    spark.sql("...")
    

相关问题