我更改了这一行:
val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}.take(20).mkString("::")
至:
val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}.mkString("::")
但是Eclipse给了我一个错误提示:
value mkString is not a value of org.apache.spark.rdd.RDD[Int]
这个错误是什么意思?
最佳答案
val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}
这将返回不是
org.apache.spark.rdd.RDD[Int]
的GenTraversableOnce
。尽管它定义了许多方法,使其类似于Int
的Scala集合,但它不是(abstract class RDD[T] extends Serializable with Logging
)。这有点像集合Int
的承诺。 mkString
使用结果之前,必须先轮询收集。在执行
.collect()
之前,请在RDD[Int]
上调用mkString
。val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}.collect.mkString("::")
或者,您可以添加一个隐式转换:
implicit def toArray[T](rdd: RDD[T]) = rdd.collect()