val lines: RDD[String] = sc.textFile("/tmp/inputs/*")
val tokenizedLines = lines.map(Tokenizer.tokenize)
在上面的代码片段中,tokenize函数可能返回空字符串。在这种情况下,如何跳过将其添加到地图中?或添加到地图后删除空条目?
答案 0 :(得分:25)
tokenizedLines.filter(_.nonEmpty)
答案 1 :(得分:11)
使用filter
和nonEmpty
的当前接受的答案会导致一些性能下降,因为nonEmpty
不是String
上的方法,而是通过隐式添加转换。使用值对象时,我希望差异几乎难以察觉,但在Scala的版本中,情况并非如此,这是一个重大的打击。
相反,人们可以使用它,确保更快:
tokenizedLines.filterNot(_.isEmpty)
答案 2 :(得分:1)
您可以将flatMap
与Option
一起使用。
类似的东西:
lines.flatMap{
case "" => None
case s => Some(s)
}
答案 3 :(得分:0)
val tokenizedLines = (lines.map(Tokenizer.tokenize)).filter(_.nonEmpty)