Apache Spark:哪一个效率更高?

时间:2014-07-21 03:57:36

标签: scala apache-spark

代码由scala编写,我想知道哪一个更有效:

    src.filter(word=>!word.contain("xx").map{word=>(word,1))

或:

    //src:Array("xx","c","d")
    //if word contains xx,fuc will return (),how to deal with it ?
    src.map(word=>if(!word.contain("xx")(word,1))
    //result:Array((), (c,1), (d,1))

如果word包含xx,fuc将返回(),如何处理?

1 个答案:

答案 0 :(得分:2)

src.map(word => if(!word.contains("xx")) (word,1))

这导致Array[Any]而不是Array[(String, Int)],因为如果该词包含" xx"它映射到()(单位)。

正确的方法是使用flatMapcollect方法。

src.flatMap { case word if ! word.contains("xx") => Some((word, 1)) 
              case _ => None }       

src.collect { case word if ! word.contains("xx") => (word, 1) } // preferred