PySpark:只将一行数据透视到一列



我有一个这样的数据帧:
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

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

您可以将只有合计的数据帧连接到没有合计的数据框架。

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

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|
+----+---+-----+

最新更新