2017-10-11 42 views
0

我嘗試了所有可能的方法,通過導入所有可能的庫並檢查所有與saveAstextFile或saveAsSequenceFile相關的問題的答案幫助。因此啓動一個新的線程。 我得到一個錯誤「錯誤:試圖保存一個RDD到HDFS我下面下面的步驟值saveAsTextFile不是scala.collection.Map[String,Long] countResult.saveAsTextFile("tmp/testfile").成員錯誤:值saveAsTextFile不是scala.collection.Map的成員[String,Long]

1.scala> import org.apache.spark.SparkFiles 
import org.apache.spark.SparkFiles 

2.scala> val countrdd = sc.parallelize(Array("hadoop","spark","hadoop","spark")).map(k => (k,1)) 
countrdd: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[17] at map at :28 

3.scala> val countResult = countrdd.countByKey() 
countResult: scala.collection.Map[String,Long] = Map(spark -> 2, hadoop -> 2) 

4.scala> countResult.saveAsTextFile("tmp/testfile") 
:33: error: value saveAsTextFile is not a member of scala.collection.Map[String,Long] 
countResult.saveAsTextFile("tmp/testfile") 

注:我使用的Spark 2.X版本獨立集羣。

+0

'saveAsTextFile'可以應用於'RDD'不正規的斯卡拉集合。 –

+0

感謝Glennie,我的理解是我們可以使用保存功能只在rdd創建轉換不與行動。 – user8051251

+0

嗯,你的動作('countByKey')不會產生'RDD'類型的結果,而是一個普通的'Map [String,Long]'類型的scala集合' –

回答

2

saveAstextFile該方法僅適用於RDD。 您可以執行任何數量的改造,如果它是RDD那麼你可以使用的方法是這樣

如果你已經申請actioncountByKey那麼這樣的方法將不再可用。

而不是countByKey您可以在這裏使用reduceByKey您可以在RDD API示例部分找到關於此here的更多詳細信息。

或者你可以試試這個代碼: -

val countrdd = sc.parallelize(Array("hadoop","spark","hadoop","spark")) 
val findRDD = .map(word => (word, 1)) 
       .reduceByKey(_ + _) 

希望這將清除您的問題

感謝

+0

非常感謝Akash的快速響應,它是一個很大的幫助。 – user8051251

相關問題