在pyspark的collect_list中包含空值

Gin*_*ead 5 pyspark

我试图collect_list在 using 时包含空值pyspark,但是该collect_list操作排除了nulls. 我研究了以下帖子Pypsark - 使用collect_list 时保留空值。然而,给出的答案并不是我想要的。

我有一个df像这样的数据框。

| id | family | date       |
----------------------------
| 1  |  Prod  | null       |
| 2  |  Dev   | 2019-02-02 |
| 3  |  Prod  | 2017-03-08 |
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的代码:

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

这给了我这样的输出:

| family | date       |
-----------------------
| Prod   |[2017-03-08]|
| Dev    |[2019-02-02]|
Run Code Online (Sandbox Code Playgroud)

我真正想要的是如下:

| family | date             |
-----------------------------
| Prod   |[null, 2017-03-08]|
| Dev    |[2019-02-02]      |
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?谢谢你!

Seq*_*nex 1

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

df = df.na.fill("my_null") # Replace null with "my_null"
df = df.groupby("family").agg(f.collect_list("date").alias("entry_date"))
Run Code Online (Sandbox Code Playgroud)

应该给你:

| family | date             |
-----------------------------
| Prod   |[my_null, 2017-03-08]|
| Dev    |[2019-02-02]      |
Run Code Online (Sandbox Code Playgroud)