在Scala Spark中找不到getOrElse方法

时间:2015-07-23 05:31:48

标签: scala intellij-idea apache-spark

尝试按照Sandy Ryza的书 Advanced Analytics with Spark 中的示例,使用IntelliJ进行编码。下面我似乎导入了所有正确的库,但为什么它不能识别getOrElse

Error:(84, 28) value getOrElse is not a member of org.apache.spark.rdd.RDD[String]
        bArtistAlias.value.getOrElse(artistID, artistID)
                       ^

代码:

import org.apache.spark.rdd.RDD
import org.apache.spark.rdd._
import org.apache.spark.rdd.PairRDDFunctions
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf 
import org.apache.spark.mllib.recommendation._

val trainData = rawUserArtistData.map { line =>
  val Array(userID, artistID, count) = line.split(' ').map(_.toInt)

  val finalArtistID = bArtistAlias.value.getOrElse(artistID, artistID)

  Rating(userID, finalArtistID, count)
}.cache()

1 个答案:

答案 0 :(得分:3)

我只能做出一个假设,因为列出的代码是缺失的部分,但我的猜测是bArtistAlias应该是Map,应该广播,但不是。

我去桑迪的书中找到了这段代码,这证实了我的猜测。所以,你似乎错过了这篇文章:

val bArtistAlias = sc.broadcast(artistAlias)

我甚至不确定你在没有代码的情况下做了什么,但它看起来像你广播RDD [String],因此错误.....这甚至无法工作,因为你无法使用其他RDD内部一个RDD