首页 > 解决方案 > 在 pyspark 的 collect_list 中包含空值

问题描述

我试图在collect_list使用时包含空值pyspark,但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]      |

有人可以帮我吗?谢谢!

标签: pyspark

解决方案


一种可能的解决方法是用另一个值替换所有空值。(也许不是最好的方法,但它仍然是一个解决方案)

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]      |

推荐阅读