如果 pyspark 中不存在,则从数据中选择键列为 null
Posted
技术标签:
【中文标题】如果 pyspark 中不存在,则从数据中选择键列为 null【英文标题】:Select key column from data as null if it doesn't exist in pyspark 【发布时间】:2019-09-12 09:59:40 【问题描述】:我的数据框(df)的结构如下:
root
|-- val1: string (nullable = true)
|-- val2: string (nullable = true)
|-- val3: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _type: string (nullable = true)
| | |-- key: string (nullable = true)
| | |-- value: string (nullable = true)
我有两条样本记录如下:
+------+------+-----------------------------------+
| val1 | val2 | val3 |
+------+------+-----------------------------------+
| A | a | k1: A1, k2: A2, k3: A3 |
+------+------+-----------------------------------+
| B | b | k3: B3 |
+------+------+-----------------------------------+
我正在尝试从中选择数据,如下所示:
df.select(val1,val2,val3.k1,val3.k2,val3.k3)
我希望我的输出看起来像:
+------+------+---------+---------+---------+
| val1 | val2 | k1 | k2 | k3 |
+------+------+---------+---------+---------+
| A | a | A1 | A2 | A3 |
+------+------+-----------------------------+
| B | b | NULL | NULL | B3 |
+------+------+-----------------------------+
但由于我没有所有记录的键 k1 和 k2,因此 select 语句会引发错误。我该如何解决这个问题?我对 pyspark 比较陌生。
【问题讨论】:
你能说明在达到这个状态之前你对这个数据框做了什么样的转换吗?val3
是一个结构数组,看起来不正确,我无法复制创建相同的架构。通常,查看您的数据 val3 应该是映射或结构
不好意思,val3是一个数组,数据如下:+------+------+---------- -------------------------+ | val1 | val2 | val3 | +------+------+------------------------------------ + |一个 |一个 | [[k1:A1],[k2:A2],[k3:A3]] | +------+------+------------------------------------ + |乙|乙 | [[k3: B3]] | +------+------+------------------------------------ +
我基本上是想将数组分解成 pyspark 中的列
【参考方案1】:
我认为你可以使用
df.selectExpr('val3.*')
让我知道这是否有效
【讨论】:
以上是关于如果 pyspark 中不存在,则从数据中选择键列为 null的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pyspark 2.1.0 选择另一个数据框中不存在的行?