从 DataFrame 列的列表中删除空字符串

pfn*_*sel 3 apache-spark apache-spark-sql pyspark

我有一DataFrame列包含一个带有一些空值的列表:

df.select('foo').show(10)
+----------+
|foo       |
+----------+
|[,]       |
|[bar, baz]|
|[,bar]    |
+----------+
Run Code Online (Sandbox Code Playgroud)

我想过滤掉所有空值,即它应该如下所示:

+----------+
|foo       |
+----------+
|null      |
|[bar, baz]|
|[bar]     |
+----------+
Run Code Online (Sandbox Code Playgroud)

我尝试使用array_remove,但无法排除空字符串。

SCo*_*uto 6

您可以使用过滤方法来做到这一点

df.withColumn("newColumn", expr("filter(foo, elem -> elem != '')")).show
Run Code Online (Sandbox Code Playgroud)

如果您不想保留原始列,可以使用相同的名称:

df.withColumn("foo", expr("filter(foo, elem -> elem != '')")).show
Run Code Online (Sandbox Code Playgroud)

结果(保留两列)

+----------+----------+
|       foo|    foonew|
+----------+----------+
|      [, ]|        []|
|[bar, baz]|[bar, baz]|
|   [, bar]|     [bar]|
+----------+----------+
Run Code Online (Sandbox Code Playgroud)