2015-06-19 87 views
0

我有什麼似乎與Spark sorting of delimited data類似的問題,但接受的解決方案不能解決我的問題。火花隱式RDD轉換不起作用

我想一個簡單的RDD應用combineByKey:

package foo 
    import org.apache.spark._ 
    import org.apache.spark.SparkConf 
    import org.apache.spark.SparkContext._ 

    object HelloTest { 
     def main(args: Array[String]) { 
     val sparkConf = new SparkConf().setAppName("Test") 
     val sc = new SparkContext(sparkConf) 
     val input = sc.textFile("/path/to/test.txt") 
     val result = input.combineByKey(
      (v) => (v, 1), 
      (acc: (Int, Int), v) => (acc._1 + v, acc._2 + 1), 
      (acc1: (Int, Int), acc2: (Int, Int)) => (acc1._1 + acc2._1, acc1._2 + acc2._2) 
     ).map{ case (key, value) => (key, value._1/value._2.toFloat) } 
     result.collectAsMap().map(println(_)) 

      sc.stop() 
     } 
    } 

我得到的(唯一的)以下錯誤而編譯:

$ scalac -cp /path/to/scala-2.10/spark-assembly-1.4.0-SNAPSHOT-hadoop2.2.0.jar -sourcepath src/ -d bin src/foo/HelloTest.scala 

error: value combineByKey is not a member of org.apache.spark.rdd.RDD[String] 

有趣的是這裏沒有描述的combineByKey功能:https://spark.apache.org/docs/latest/programming-guide.html#working-with-key-value-pairs但是,在與k/v配對的部分learning spark book

回答

5

所以這個問題似乎是你的輸入是無鑰匙的。當從文本文件讀入輸入時,它是一個字符串的RDD,並且對於combineByKey或任何類似的函數來說,它需要是鍵值對的RDD。希望看到一個學習火花閱讀器的幫助和高興:)

+0

是的,那是。很高興看到作者實際回答這類問題! – Bacon

+1

謝謝,讓我知道如果你碰到更多的問題:) – Holden