值 mkString 不是 org.apache.spark.rdd.RDD[Int] 的值

use*_*364 2 scala

我改变了这一行:

val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}.take(20).mkString("::")
Run Code Online (Sandbox Code Playgroud)

到:

val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}.mkString("::") 
Run Code Online (Sandbox Code Playgroud)

但是 Eclipse 给了我一个错误提示: value mkString is not a value of org.apache.spark.rdd.RDD[Int]

这个错误是什么意思?

Ari*_*iao 5

val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}
Run Code Online (Sandbox Code Playgroud)

这将返回一个org.apache.spark.rdd.RDD[Int]不是GenTraversableOnce。虽然它定义了很多方法,这使得它像一个 Scala 集合Int但它不是( 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("::")
Run Code Online (Sandbox Code Playgroud)

或者您可以添加隐式转换:

implicit def toArray[T](rdd: RDD[T]) = rdd.collect()
Run Code Online (Sandbox Code Playgroud)