在pyspark中的collect_list函数中包含空值。

5
我正在使用pyspark,尝试在使用collect_list时包含空值,但collect_list操作会排除nulls。我查看了以下帖子Pypsark - Retain null values when using collect_list,但是给出的答案不符合我的要求。
我有一个像这样的数据框df
| id | family | date       |
----------------------------
| 1  |  Prod  | null       |
| 2  |  Dev   | 2019-02-02 |
| 3  |  Prod  | 2017-03-08 |

以下是我的代码:

df.groupby("family").agg(f.collect_list("date").alias("entry_date"))

这会给我一个像这样的输出:

| family | date       |
-----------------------
| Prod   |[2017-03-08]|
| Dev    |[2019-02-02]|

我真正想要的是:

| family | date             |
-----------------------------
| Prod   |[null, 2017-03-08]|
| Dev    |[2019-02-02]      |

有人能帮我解决这个问题吗?谢谢!

1个回答

1
一个可能的解决方法是将所有的空值替换为另一个值。(也许不是最好的方法,但它仍然是一个解决方案)
df = df.na.fill("my_null") # Replace null with "my_null"
df = df.groupby("family").agg(f.collect_list("date").alias("entry_date"))

应该给你:

| family | date             |
-----------------------------
| Prod   |[my_null, 2017-03-08]|
| Dev    |[2019-02-02]      |

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接