从PySpark的复杂列中提取值



我有一个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]|
+---+--------------------+

最新更新