【问题标题】:Spark implicit RDD conversion doesn't workSpark 隐式 RDD 转换不起作用
【发布时间】:2015-09-05 23:51:52
【问题描述】:

我遇到了与 Spark sorting of delimited data 类似的问题,但接受的解决方案并不能解决我的问题。

我正在尝试在一个简单的 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,但在 learning spark book 的使用 k/v 对部分。

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    所以问题似乎是您的输入未键入。当您从文本文件中读取输入时,它是字符串的 RDD,对于 combineByKey 或任何类似函数,它需要是键值对的 RDD。希望能有所帮助,也很高兴看到 Learning Spark 读者:)

    【讨论】:

    • 是的,就是这样。很高兴看到作者真正回答了这类问题!
    • 谢谢,如果您遇到任何问题,请告诉我 :)
    猜你喜欢
    • 2018-11-19
    • 1970-01-01
    • 2017-08-27
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多