apache-spark - 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
我应该如何以正确的方式过滤?非常感谢!
解决方案
您可以使用exists
功能:
test_df.filter("!exists(a, x -> x is null)").show()
#+---------+
#| a|
#+---------+
#|[1, 2, 3]|
#+---------+
推荐阅读
- linux - iconv 命令不会将纯文本文件的编码更改为另一种编码
- python - 如何使用 python 抓取使用 base 64 图像编码并存储在数据库中
- typescript - typescript 类装饰器:typescript 编译器无法识别抽象方法
- python - 使用 ansible 和 python 在 Oracle 中更改参数
- python - python如何将动态创建类转储到文件
- reactjs - 将标准化数据存储到 Redux
- visual-studio - 根据文件夹或显示文件夹路径设置 Visual Studio 文档选项卡颜色
- tfs - TFS中runid和testcase有什么联系?
- c++ - 用于内存优化的字符串编码
- ios - 如何使用 XMPP 获取登录用户的组列表?