从 Spark RDD 中删除元素

Posted

技术标签:

【中文标题】从 Spark RDD 中删除元素【英文标题】:Remove elements from Spark RDD 【发布时间】:2015-12-04 14:31:02 【问题描述】:

我正在从一个文本文件构建一个 RDD。有些行不符合我期望的格式,在这种情况下我使用标记 -1。

def myParser(line):
    try:
        # do something
    except:
        return (-1, -1), -1

lines = sc.textFile('path_to_file')
pairs = lines.map(myParser)

是否可以删除带有-1 标记的行?如果没有,解决方法是什么?

【问题讨论】:

只使用filter ...不是吗? 在 Java 中我使用了一个过滤器: .filter(new Function() public Boolean call(CassandraRow row) throws Exception return row.getString("value").equals( whatIWant); ). lambda 函数的参数是什么。键、值还是两者兼而有之? 【参考方案1】:

我能想到的最干净的解决方案是使用flatMap 丢弃格式错误的行:

def myParser(line):
    try:
        # do something
        return [result] # where result is the value you want to return
    except:
        return []

sc.textFile('path_to_file').flatMap(myParser)

另见What is the equivalent to scala.util.Try in pyspark?

你也可以在map之后过滤:

pairs = lines.map(myParser).filter(lambda x: x != ((-1, -1), -1))

【讨论】:

以上是关于从 Spark RDD 中删除元素的主要内容,如果未能解决你的问题,请参考以下文章

如何删除元素如何根据另一个rdd从一个rdd中删除元素并在pyspark中创建新的rdd?

对RDD进行Spark重复数据删除以获得更大的RDD

如何在 spark rdd 中获取最大值并将其删除?

Spark Scala 根据另一个 RDD 的列删除一个 RDD 中的行

Spark数据框:从数组中删除元素

如何在 Spark RDD 中选择一系列元素?