【问题标题】:PySpark: Pivot only one row to columnPySpark:仅将一行旋转到列
【发布时间】:2021-11-16 14:42:12
【问题描述】:

我有一个像这样的数据框:
df = sc.parallelize([("num1", "1"), ("num2", "5"), ("total", "10")]).toDF(("key", "val"))

key     val
num1    1
num2    5
total   10

我只想将 total 行转为新列并保留每一行的值:

key     val   total
num1    1     10
num2    5     10

我尝试过旋转和聚合,但无法获得具有相同值的一列。

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    您可以将只有总数的数据框加入到没有总数的数据框中。

    另一种选择是收集总数并将其添加为文字。

    from pyspark.sql import functions as f
    
    # option 1    
    df1 = df.filter("key <> 'total'")
    df2 = df.filter("key = 'total'").select(f.col('val').alias('total'))
    
    df1.join(df2).show()
    
    +----+---+-----+                                                                
    | key|val|total|
    +----+---+-----+
    |num1|  1|   10|
    |num2|  5|   10|
    +----+---+-----+
    
    # option 2
    total = df.filter("key = 'total'").select('val').collect()[0][0]
    df.filter("key <> 'total'").withColumn('total', f.lit(total)).show()
    
    +----+---+-----+                                                                
    | key|val|total|
    +----+---+-----+
    |num1|  1|   10|
    |num2|  5|   10|
    +----+---+-----+
    

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多