Pyspark 使用 .filter() 过滤掉空列表

Posted

技术标签:

【中文标题】Pyspark 使用 .filter() 过滤掉空列表【英文标题】:Pyspark filter out empty lists using .filter() 【发布时间】:2017-02-24 11:54:02 【问题描述】:

我有一个 pyspark 数据框,其中一列充满了列表,要么包含条目,要么只包含空列表。我想有效地过滤掉所有包含空列表的行。

import pyspark.sql.functions as sf
df.filter(sf.col('column_with_lists') != []) 

返回以下错误:

Py4JJavaError: An error occurred while calling o303.notEqual.
: java.lang.RuntimeException: Unsupported literal type class

也许我可以检查列表的长度并强制它应该 > 0(请参阅here)。但是,如果我使用 pyspark-sql 并且 filter 甚至允许使用 lambda,我不确定这种语法是如何工作的。

也许要明确一点,我有多个列,但想将上述过滤器应用于单个列,删除所有条目。链接的 SO 示例过滤单个列。

提前致谢!

【问题讨论】:

【参考方案1】:

所以看起来就像使用sql.functions中的size函数一样简单:

import pyspark.sql.functions as sf
df.filter(sf.size('column_with_lists') > 0)

【讨论】:

这里的sf 是什么? @derricw functions(准确地说是pyspark.sql.functions)模块。

以上是关于Pyspark 使用 .filter() 过滤掉空列表的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - 使用广播字典中的日期过滤 RDD

ng-repeat过滤器不过滤掉空值

在 pyspark shell 中工作的过滤器不是 spark-submit

PySpark:在“NoneType”对象上过滤掉 RDD 元素失败是不可迭代的

如何在过滤器pyspark RDD中过滤掉某种模式[重复]

如何在过滤器和 lambda 函数 pyspark 中使用多列