如果pyspark中不存在,请从数据中选择键列为null

时间:2019-09-12 09:59:40

标签: pyspark apache-spark-sql pyspark-sql

我的数据框(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的新手。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用

df.selectExpr('val3.*')

让我知道这是否可行