首页 > 解决方案 > Pyspark - 过滤包含空值的 ArrayType 行

问题描述

我是 PySpark 的初学者。假设我有一个像这样的 Spark 数据框:

test_df = spark.createDataFrame(pd.DataFrame({"a":[[1,2,3], [None,2,3], [None, None, None]]}))

现在我希望过滤数组不包含None值的行(在我的情况下只保留第一行)。

我曾尝试使用:

test_df.filter(array_contains(test_df.a, None))

但它不起作用并引发错误:

AnalysisException: "cannot resolve 'array_contains( a, NULL)' due to data type mismatch: Null typed values cannot be used as arguments;;\n'Filter array_contains(a#166, null)\n+- LogicalRDD [a#166],假\n

我应该如何以正确的方式过滤?非常感谢!

标签: apache-sparkpysparkapache-spark-sql

解决方案


您可以使用exists功能:

test_df.filter("!exists(a, x -> x is null)").show() 

#+---------+
#|        a|
#+---------+
#|[1, 2, 3]|
#+---------+

推荐阅读