我更改了这一行:

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()

09-19 01:41