在Apache Spark中写文件

8
我正在编写Scala代码,需要将数据写入HDFS文件中。在本地使用Filewriter.write可以正常工作,但在HDFS上无法正常工作。 经过查询,我发现在Apache Spark中有以下选项可用于写入: RDD.saveAsTextFileDataFrame.write.format
我的问题是:如果我只想将int或string写入Apache Spark的文件中,该怎么办?
跟进: 我需要将头部、DataFrame内容写入输出文件,然后附加一些字符串。使用 sc.parallelize(Seq(<String>)) 是否有帮助?
2个回答

20

使用Seq将您的数据(int / string)创建为RDD:有关详细信息,请参见并行集合

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

谢谢。它确实有效。如果你能帮忙,我正在编辑我的问题,并进行跟进。 - kruparulz14
1
一旦您接受了一个答案,最好发布新的问题。 - Ravindra babu

6

跟进示例:(如下所示进行测试)

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. . .


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接