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