使用其他列值列表生成新列

Generating new column with list of other column values

我有一个数据框如下

+-----+---+------+-----+
| id |age|height| score
+-----+---+------+-----+
|1001|  5|    80| 12
|1002|  9|    95| 189
|1003| 10|    82| 345
+-----+---+------+-----+

并想创建一个新列,将所有其他列组合在一个键值结构中,并添加一些列,如下所示

+-----+----------------------------------------------------------+------+
| id  |property                                                  | score
+-----+----------------------------------------------------------+------+
|1001|  {'id': '1001', 'age': '5', 'height': '80', 'score': '12'} | 12
|1002|  {'id': '1002', 'age': '9', 'height': '95', 'score': '189'}|189
|1003| {'id': '1003', 'age': '10', 'height': '82', 'score':'345'}|345
+----------------------------------------------------------------+--------+

我试过 df.withColumn('property', map(lambda row: row.asDict(), df.collect())) 但它没有产生我想要的结果。我的方法有什么问题吗?

您可以使用 to_jsonstruct 函数来完成。

df = df.select(
    'id',
    F.to_json(F.struct('*')).alias('property'),
    'score'
)
df.show(truncate=False)