web-dev-qa-db-ja.com

Apacheのファイルへの書き込みSpark

私はScala HDFSのファイルに書き込む必要があるコードを書いています。ローカルで_Filewriter.write_を使用すると、動作します。HDFSでも同じことは動作しません。確認すると、Apache Spark -RDD.saveAsTextFile_および_DataFrame.write.format_に書き込むための次のオプションがあることがわかりました。

私の質問は次のとおりです。ApacheSparkのファイルにintまたはstringを書き込みたい場合はどうすればよいですか?

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

7
kruparulz14

RDDを使用して、データ(int/string)でSeqを作成します。詳細については、 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")
17
Ronak Patel

フォローアップ例:(以下のようにテスト済み)

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

ここに他の例があります。。。

4
Ronak Patel