2014-11-05 66 views
2
val sc = new SparkContext("local[4]", "wc") 

    val lines: RDD[String] = sc.textFile("/tmp/inputs/*") 
    val errors = lines.filter(line => line.contains("ERROR")) 

    // Count all the errors 
    println(errors.count()) 

上面的代碼會計算包含單詞ERROR的行數。是否有一個與「contains」類似的簡化函數,它將返回該單詞的出現次數?apache spark中每個單詞的發生次數

表示該文件是在Gigs方面,我想用parallelalize使用火花集羣的努力。

回答

1

就指望每行的實例,總結那些在一起:

val errorCount = lines.map{line => line.split("[\\p{Punct}\\p{Space}]").filter(_ == "ERROR").size}.reduce(_ + _) 
+1

我認爲'map'和'filter'應該由星火得到流水線在一起,所以我會感到驚訝,如果這些優化減少了內存消費。 Spark應該永遠不會實現完整的中間'lines.map(...)'數據集;我認爲簡單的'lines.filter(...)。count()'應該非常高效。 – 2014-11-05 16:45:32

+0

@JoshRosen有趣的。謝謝!。關於內存消耗,我指的是RDD的大小,因爲RDD [Int]的大小應該大於RDD [String],這可能是有益的,假設RDD被進一步使用,但是filter(.. )。count「確實很簡單。 – maasg 2014-11-05 17:11:56

+0

Tokenizer.scala:39:value collect is not the member of Int [error] val errors = lines.flatMap {line => if(line.contains(「ERROR」))Some(1)else None} .reduce( _ + _)。collect ????但上面的代碼片段顯示了一種計算包含ERROR的行數而不是ERROR出現次數的方法。 – Siva 2014-11-06 05:46:43

相關問題