2015-04-23 19 views
1

我改變了這一行:值mkString不是org.apache.spark.rdd.RDD值[INT]

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]

這個錯誤是什麼意思?

+1

也...雖然事情像'地圖{情況下(用戶,ratednum)=> ratednum}。取(20)'工作.. 。將它作爲'map({case(user,ratednum)=> ratednum})可讀性更好一些。take(20)'或'map {case(user,ratednum)=> ratednum} take 20' –

回答

4
val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum} 

這將返回org.apache.spark.rdd.RDD[Int]這是不GenTraversableOnce。雖然它定義了很多方法,使其像Scala集合Int,它不是abstract class RDD[T] extends Serializable with Logging)。這有點像集合Int的承諾。你必須在你的mkString之前輪詢收集結果。

在執行mkString之前,請致電.collect(),RDD[Int]

val ratedNum = rows.sortBy(- _._2).map{case (user , ratednum) => ratednum}.collect.mkString("::") 

或者,您可以添加的隱式轉換:

implicit def toArray[T](rdd: RDD[T]) = rdd.collect() 
相關問題