可以使用groupby和pivot方法来解决此问题。首先,我们需要使用groupby方法按照id列分组。然后,我们可以使用pivot方法并指定“priority”列来创建新列。最后,我们需要使用fillna方法来使用默认值填充缺失的单元格。
以下是用于解决此问题的示例代码:
from pyspark.sql.functions import *
from pyspark.sql import SparkSession
# 创建Spark会话
spark = SparkSession.builder.appName("groupby_pivot_demo").getOrCreate()
spark.conf.set("spark.sql.shuffle.partitions", "5")
# 创建示例数据
data = [("id1", "A", 1),
("id1", "B", 2),
("id1", "C", 3),
("id2", "A", 2),
("id2", "B", 1),
("id3", "A", 3)]
df = spark.createDataFrame(data, ["id", "priority", "value"])
# 按照id分组并创建新列
df_grouped = df.groupBy("id").pivot("priority").agg(first(col("value")))
# 填充缺失单元格
df_grouped = df_grouped.fillna(0)
df_grouped.show()
输出结果:
+---+---+---+---+
| id| A| B| C|
+---+---+---+---+
|id2| 2| 1| 0|
|id1| 1| 2| 3|
|id3| 3| 0| 0|
+---+---+---+---+
上一篇:按照id分组并根据条件更改列值