IntelliJ中找不到reduceByKey方法

时间:2014-06-06 14:31:57

标签: scala intellij-idea apache-spark

这是我正在为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的实现上时,它提供了三种可能的实现,因此它似乎被找到了?:

enter image description here

3 个答案:

答案 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 * 方法。我目前没有一般的解决方案 - 除非您可以安全地忽略智能感知错误