Select 如果 pyspark 中不存在,则数据中的键列为 null
Select key column from data as null if it doesn't exist in pyspark
我的数据框 (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} |
+------+------+-----------------------------------+
我正在尝试 select 数据如下:
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 比较陌生。
我想你可以使用
df.selectExpr('val3.*')
让我知道这是否有效
我的数据框 (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} |
+------+------+-----------------------------------+
我正在尝试 select 数据如下:
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 比较陌生。
我想你可以使用
df.selectExpr('val3.*')
让我知道这是否有效