2016-04-05 6 views
0

私はこれがあります。マップ結果をSpark scalaのテキストファイルに保存する方法は?

val tokenFreq = reverseKey.countByKey 
// tokenFreq: scala.collection.Map[String,Long] = Map(ABIGAIL -> 3,... 

を、私はテキストファイルにtokenFreqの結果を保存したいです。

私はsaveAsTextFileを使用しようとしましたが、それは言う:

error: value saveAsTextFile is not a member of scala.collection.Map[String,Long]

答えて

0

MapRDD[(String, Long)]に変換してから、RDD APIを使用して保存することができます。もちろん

val conf = new SparkConf().setAppName("TokenCounter").setMaster("local[4]") 
val sc = new SparkContext(conf) 

val tokenFreq = reverseKey.countByKey 
sc.parallelize(tokenFreq.toSeq).saveAsTextFile("token_freq") 

、これはあなたのデータ構造を変換する、しかし、あなたはこのRDDクイック検索を取り戻すためにマップとしてそれを収集し、それを読むことができます。

val tokenFreqMap = sc.textFile("token_freq").collectAsMap 
0

countByKeyとしてリターンを無地のScala Map、あなたはそれをファイルに保存するためにScalaの定期的な手段を使用する必要があります。そうする

Here is片道:countByKeyの結果はすべての労働者から収集された後に、このコードは、ドライバ上で実行されることを

import java.io.PrintWriter 

new PrintWriter("filename") { 
    tokenFreq.foreach { 
    case (k, v) => 
     write(k + ":" + v) 
     write("\n") 
    } 
    close() 
} 

注意、。

0

あなたのコレクションがあなたのスパーククラスターに配布されている場所であれば、saveAs * apisを使うことができます。 RDD/DataFrame/DataSetでcountByKeyを使用すると、クラスタ内のデータ間でSparkドライバにデータが収集されます。収集したコレクションにはsaveAs * apiを使用できません。

関連する問題