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

Apache spark 从DataFrame列中的列表中删除空字符串,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个DataFrame列,其中包含一个带有一些空值的列表: df.select('foo').show(10) +----------+ |foo | +----------+ |[,] | |[bar, baz]| |[,bar] | +----------+ 我想过滤掉所有空值,即它应该是这样的: +----------+ |foo | +----------+ |null | |[bar, baz]| |[bar] | +-

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

df.select('foo').show(10)
+----------+
|foo       |
+----------+
|[,]       |
|[bar, baz]|
|[,bar]    |
+----------+
我想过滤掉所有空值,即它应该是这样的:

+----------+
|foo       |
+----------+
|null      |
|[bar, baz]|
|[bar]     |
+----------+

我尝试使用
array\u remove
,但无法排除空字符串。

您可以使用filter方法

df.withColumn("newColumn", expr("filter(foo, elem -> elem != '')")).show
如果不想保留原始列,可以使用相同的名称:

df.withColumn("foo", expr("filter(foo, elem -> elem != '')")).show
结果(保留两列)


请使用此选项,预期输出仅使用筛选函数

from pyspark.sql.functions import expr, when, size, lit
from pyspark.sql.session import SparkSession

spark = SparkSession.builder.getOrCreate()

spark.createDataFrame([[[None, None]],
                       [['bar', 'bar']],
                       [[None, 'bar']]],
                      schema=['foo']) \
    .withColumn('foo', when(size(expr("filter(foo, elem -> elem != '')")) == 0, lit(None))
                .otherwise(expr("filter(foo, elem -> elem != '')"))) \
    .show(truncate=False)

+----------+
|foo       |
+----------+
|null      |
|[bar, bar]|
|[bar]     |
+----------+

您可以使用自定义项吗
from pyspark.sql.functions import expr, when, size, lit
from pyspark.sql.session import SparkSession

spark = SparkSession.builder.getOrCreate()

spark.createDataFrame([[[None, None]],
                       [['bar', 'bar']],
                       [[None, 'bar']]],
                      schema=['foo']) \
    .withColumn('foo', when(size(expr("filter(foo, elem -> elem != '')")) == 0, lit(None))
                .otherwise(expr("filter(foo, elem -> elem != '')"))) \
    .show(truncate=False)

+----------+
|foo       |
+----------+
|null      |
|[bar, bar]|
|[bar]     |
+----------+