web-dev-qa-db-fra.com

Écrire dans un fichier dans Apache Spark

J'écris un code Scala qui m'oblige à écrire dans un fichier en HDFS. Lorsque j'utilise Filewriter.write En local, cela fonctionne. La même chose ne fonctionne pas sur HDFS. Après vérification, j'ai trouvé qu'il existe les options suivantes pour écrire dans Apache Spark- RDD.saveAsTextFile Et DataFrame.write.format.

Ma question est: que faire si je veux juste écrire un int ou une chaîne dans un fichier dans Apache Spark?

Suivi: J'ai besoin d'écrire dans un fichier de sortie un en-tête, le contenu de DataFrame, puis d'ajouter une chaîne. Est-ce que sc.parallelize(Seq(<String>)) aide?

7
kruparulz14

créez RDD avec vos données (int/chaîne) en utilisant Seq: voir parallelized-collections pour plus de détails:

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

Exemple de suivi: (testé comme ci-dessous)

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") 

production:

HEADER
BODY
FOOTER

plus d'exemples ici...

4
Ronak Patel