我改变了这一行:
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]
这个错误是什么意思?
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)
| 归档时间: |
|
| 查看次数: |
3110 次 |
| 最近记录: |