从 DataFrame 列的列表中删除空字符串
Remove empty strings from list in DataFrame column
我有一个 DataFrame
列,其中包含一个包含一些空值的列表:
df.select('foo').show(10)
+----------+
|foo |
+----------+
|[,] |
|[bar, baz]|
|[,bar] |
+----------+
我想过滤掉所有空值,即它应该如下所示:
+----------+
|foo |
+----------+
|null |
|[bar, baz]|
|[bar] |
+----------+
我尝试使用 array_remove
,但我无法排除空字符串。
你可以用过滤的方法来做
df.withColumn("newColumn", expr("filter(foo, elem -> elem != '')")).show
如果您不想保留原来的列,您可以使用相同的名称:
df.withColumn("foo", expr("filter(foo, elem -> elem != '')")).show
结果(保留两列)
+----------+----------+
| foo| foonew|
+----------+----------+
| [, ]| []|
|[bar, baz]|[bar, baz]|
| [, 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] |
+----------+
我有一个 DataFrame
列,其中包含一个包含一些空值的列表:
df.select('foo').show(10)
+----------+
|foo |
+----------+
|[,] |
|[bar, baz]|
|[,bar] |
+----------+
我想过滤掉所有空值,即它应该如下所示:
+----------+
|foo |
+----------+
|null |
|[bar, baz]|
|[bar] |
+----------+
我尝试使用 array_remove
,但我无法排除空字符串。
你可以用过滤的方法来做
df.withColumn("newColumn", expr("filter(foo, elem -> elem != '')")).show
如果您不想保留原来的列,您可以使用相同的名称:
df.withColumn("foo", expr("filter(foo, elem -> elem != '')")).show
结果(保留两列)
+----------+----------+
| foo| foonew|
+----------+----------+
| [, ]| []|
|[bar, baz]|[bar, baz]|
| [, 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] |
+----------+