从scala中的地图中删除空字符串

时间:2014-11-05 09:31:24

标签: scala apache-spark

val lines: RDD[String] = sc.textFile("/tmp/inputs/*")
val tokenizedLines = lines.map(Tokenizer.tokenize)

在上面的代码片段中,tokenize函数可能返回空字符串。在这种情况下,如何跳过将其添加到地图中?或添加到地图后删除空条目?

4 个答案:

答案 0 :(得分:25)

tokenizedLines.filter(_.nonEmpty)

答案 1 :(得分:11)

使用filternonEmpty的当前接受的答案会导致一些性能下降,因为nonEmpty不是String上的方法,而是通过隐式添加转换。使用值对象时,我希望差异几乎难以察觉,但在Scala的版本中,情况并非如此,这是一个重大的打击。

相反,人们可以使用它,确保更快:

tokenizedLines.filterNot(_.isEmpty)

答案 2 :(得分:1)

您可以将flatMapOption一起使用。

类似的东西:

lines.flatMap{
     case "" => None 
     case s => Some(s)
}

答案 3 :(得分:0)

val tokenizedLines = (lines.map(Tokenizer.tokenize)).filter(_.nonEmpty)