从pyspark中的复杂列中提取值

8ehkhllq  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(491)

我有一个pysparkDataframe,它有一个复杂的列,请参阅下面的值:

ID  value
1   [{"label":"animal","value":"cat"},{"label":null,"value":"George"}]

我想在pyspark dataframe中添加一个新的列,基本上将它转换为字符串列表。如果label为null,则字符串应包含“value”,如果label不为null,则字符串应为“label:value". 因此,对于上面的dataframe示例,输出应如下所示:

ID   new_column
 1   ["animal:cat", "George"]
wbgh16ku

wbgh16ku1#

你可以用 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]|
+---+--------------------+

相关问题