这是我正在为reduceByKey尝试的代码:
import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext._
import org.apache.spark.SparkContext
import scala.math.random
import org.apache.spark._
import org.apache.spark.storage.StorageLevel
object MapReduce {
def main(args: Array[String]) {
val sc = new SparkContext("local[4]" , "")
val file = sc.textFile("c:/data-files/myfile.txt")
val counts = file.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
}
}
是否给出编译器错误:“无法解析符号reduceByKey”
当我将鼠标悬停在reduceByKey的实现上时,它提供了三种可能的实现,因此它似乎被找到了?:
答案 0 :(得分:11)
您需要将以下导入添加到您的文件中:
import org.apache.spark.SparkContext ._
Spark文档:
" 在Scala中,这些操作在包含Tuple2对象的RDD上自动可用(内置 语言中的元组,只需在程序中导入org.apache.spark.SparkContext ._ ,只需编写(a,b)),即可创建Spark的隐式转换。 PairRDDFunctions类中提供了键值对操作,如果您导入转换,它会自动包装元组的RDD。"
答案 1 :(得分:3)
好像Spark 1.4.x中记录的行为已经改变了。要让IntelliJ识别隐式转换,您现在必须添加以下导入:
import org.apache.spark.rdd.RDD._
答案 2 :(得分:2)
我注意到有时IJ无法解析通过PairRDDFunctions隐式导入的方法 https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/PairRDDFunctions.scala。
隐式导入的方法包括 reduceByKey * 和 reduceByKeyAndWindow * 方法。我目前没有一般的解决方案 - 除非您可以安全地忽略智能感知错误