2016-08-26 21 views
3

私はHDFSのファイルに書き込む必要があるScalaコードを書いています。 ローカルでFilewriter.writeを使用すると動作します。同じことはHDFSでは機能しません。 確認したところ、Apache Sparkに書き込むための以下のオプションがあります。 RDD.saveAsTextFileDataFrame.write.formatApache Sparkでファイルに書き込む

質問:Apache Sparkのファイルにintや文字列を書きたいだけの場合はどうすればいいですか?

フォローアップ: 出力ファイルにヘッダーとDataFrameの内容を書き込んだ後、文字列を追加する必要があります。 sc.parallelize(Seq(<String>))はお手伝いしますか?

答えて

8

Seqを使用してデータを(int型/文字列)RDDを作成します。詳細については、parallelized-collectionsを参照してください。

sc.parallelize(Seq(5)) //for writing int (5) 
sc.parallelize(Seq("Test String")) // for writing string 

val conf = new SparkConf().setAppName("Writing Int to File").setMaster("local") 
val sc = new SparkContext(conf) 
val intRdd= sc.parallelize(Seq(5)) 
intRdd.saveAsTextFile("out\\int\\test") 

val conf = new SparkConf().setAppName("Writing string to File").setMaster("local") 
val sc = new SparkContext(conf) 
val stringRdd = sc.parallelize(Seq("Test String")) 
stringRdd.saveAsTextFile("out\\string\\test") 
+0

感謝。それはうまくいった。私はあなたが助けることができるならば、フォローアップで自分の質問を編集しています。 – kruparulz14

+0

回答を受け入れたら、新しい質問を投稿することをお勧めします。 –

2

例をフォローアップ:(として試験以下)

val conf = new SparkConf().setAppName("Total Countries having Icon").setMaster("local") 
val sc = new SparkContext(conf) 

val headerRDD= sc.parallelize(Seq("HEADER")) 

//Replace BODY part with your DF 
val bodyRDD= sc.parallelize(Seq("BODY")) 

val footerRDD = sc.parallelize(Seq("FOOTER")) 

//combine all rdds to final  
val finalRDD = headerRDD ++ bodyRDD ++ footerRDD 

//finalRDD.foreach(line => println(line)) 

//output to one file 
finalRDD.coalesce(1, true).saveAsTextFile("test") 

出力:

HEADER 
BODY 
FOOTER 

more examples here. . .

関連する問題