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() 过滤掉空列表的主要内容,如果未能解决你的问题,请参考以下文章