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 shell 中工作的过滤器不是 spark-submit