我有一个PySpark数据框架,它有一个复杂的列,参考下面的值:
ID value
1 [{"label":"animal","value":"cat"},{"label":null,"value":"George"}]
我想在PySpark数据框架中添加一个新列,它基本上将其转换为字符串列表。如果Label为空,则string应包含"value"如果label不为空,string应该是"label:value"所以对于上面的示例数据帧,输出应该如下所示:
ID new_column
1 ["animal:cat", "George"]
您可以使用transform
将每个数组元素转换为字符串,该字符串使用concat_ws
:
df2 = df.selectExpr(
'id',
"transform(value, x -> concat_ws(':', x['label'], x['value'])) as new_column"
)
df2.show()
+---+--------------------+
| id| new_column|
+---+--------------------+
| 1|[animal:cat, George]|
+---+--------------------+