尝试按照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()
答案 0 :(得分:3)
我只能做出一个假设,因为列出的代码是缺失的部分,但我的猜测是bArtistAlias
应该是Map
,应该广播,但不是。
我去桑迪的书中找到了这段代码,这证实了我的猜测。所以,你似乎错过了这篇文章:
val bArtistAlias = sc.broadcast(artistAlias)
我甚至不确定你在没有代码的情况下做了什么,但它看起来像你广播RDD [String],因此错误.....这甚至无法工作,因为你无法使用其他RDD内部一个RDD