从 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 中的选定列和行中提取值

从 pyspark 数据框中的列中提取特定字符串

从 Pyspark 中的嵌套 Json-String 列中提取模式

Pyspark:如何根据另一列中的匹配值从数组中的第一次出现中选择直到最后的值

PySpark - 如何根据列中的两个值从数据框中过滤出连续的行块

数据框列中的嵌套列表,提取数据框列中列表的值 Pyspark Spark