从 PySpark 中的复杂列中提取值
Posted
技术标签:
【中文标题】从 PySpark 中的复杂列中提取值【英文标题】:Extract values from a complex column in PySpark 【发布时间】:2021-02-09 15:27:58 【问题描述】:我有一个 PySpark 数据框,它有一个复杂的列,参考下面的值:
ID value
1 ["label":"animal","value":"cat","label":null,"value":"George"]
我想在 PySpark 数据框中添加一个新列,该列基本上将其转换为字符串列表。如果 Label 为 null,则字符串应包含“value”,如果 label 不为 null,则字符串应为“label:value”。因此,对于上面的示例数据框,输出应如下所示:
ID new_column
1 ["animal:cat", "George"]
【问题讨论】:
【参考方案1】:您可以使用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]|
+---+--------------------+
【讨论】:
以上是关于从 PySpark 中的复杂列中提取值的主要内容,如果未能解决你的问题,请参考以下文章
从 Pyspark 中的嵌套 Json-String 列中提取模式
Pyspark:如何根据另一列中的匹配值从数组中的第一次出现中选择直到最后的值