在Scala Spark中找不到reduceByKey方法

时间:2014-05-29 22:09:00

标签: scala apache-spark rdd

尝试从源代码运行http://spark.apache.org/docs/latest/quick-start.html#a-standalone-app-in-scala

这一行:

val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

正在抛出错误

value reduceByKey is not a member of org.apache.spark.rdd.RDD[(String, Int)]
  val wordCounts = logData.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

logData.flatMap(line => line.split(" ")).map(word => (word, 1))返回MappedRDD,但我在http://spark.apache.org/docs/0.9.1/api/core/index.html#org.apache.spark.rdd.RDD

中找不到此类型

我从Spark源代码运行此代码,所以可能是类路径问题?但是必需的依赖项在我的类路径上。

3 个答案:

答案 0 :(得分:35)

您应该从SparkContext

导入隐式转化
import org.apache.spark.SparkContext._

他们使用'pimp up my library'模式为RDD的特定类型添加方法。如果好奇,请参阅SparkContext:1296

答案 1 :(得分:0)

如果您在ScalaIDE上使用maven,我只是通过更新spark-streaming版本1.2到版本1.3的依赖关系来解决问题。

答案 2 :(得分:0)

实际上,您可以在PairRDDFunctions类中找到它。 PairRDDFunctions是一个类,它包含通过隐式转换在(键,值)对的RDD上可用的额外函数。

https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions