PySpark 根据另一列的类别添加多列

PySpark add multiple columns based on categories from the other column

我有一个如下所示的数据集:

id | category | value
---+----------+------
1  | a        | 3
2  | a        | 3
3  | a        | 3
3  | b        | 1
4  | a        | 1
4  | b        | abc

我想要的输出是:

id | category_a | category_b
---+------------+--------
1  | 3          | null
2  | 3          | null
3  | 3          | 1
4  | 1          | abc

这意味着它将 groupBy id, category 并创建虚拟列。

如何将输入转换为预期的输出?

我的做法是:

pivoted_df = df.groupBy("id") \
        .pivot("category") \
        .agg(F.lit(F.col("value")))

但是我得到了这个错误:

pyspark.sql.utils.AnalysisException: Aggregate expression required for pivot, but '`value`' did not appear in any aggregate function.;

更新: value 列也包含非数字值。

对于 category 列,每个 id 将有 2 行仅关于 2 个类别 a, b

df = df.groupBy('id').pivot('category').agg(F.first('value'))