使用其他列值列表生成新列
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_json
和 struct
函数来完成。
df = df.select(
'id',
F.to_json(F.struct('*')).alias('property'),
'score'
)
df.show(truncate=False)
我有一个数据框如下
+-----+---+------+-----+
| 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_json
和 struct
函数来完成。
df = df.select(
'id',
F.to_json(F.struct('*')).alias('property'),
'score'
)
df.show(truncate=False)