[英]saveAsTextFile() to write the final RDD as single text file - Apache Spark
我正在使用Apache Spark處理批處理應用程序,我想將最終的RDD寫為文本文件,目前我正在使用RDD中提供的saveAsTextFile("filePath")
方法。
我的文本文件包含用\
分隔符分隔的字段。 所以在模型類toString()方法中,我添加了所有用\
分隔符分隔的字段。
這是處理這個問題的正確方法嗎? 或任何其他最佳方法?
如果我使用Java中提供的FileWriter
類迭代RDD並編寫文件內容,該怎么辦?
請告知此事。
此致,尚卡爾
要寫為單個文件,有幾個選項。 如果您寫入HDFS或類似的分布式商店,您可以先將RDD coalesce
到一個分區(注意您的數據必須適合單個工作人員),或者您可以將數據collect
到驅動程序然后使用文件編寫器。
public static boolean copyMerge(SparkConf sparkConf, JavaRDD rdd, String dstPath) throws IOException, URISyntaxException {
Configuration hadoopConf = sparkConf.hadoopConfiguration();
hadoopConf.set("fs.s3.awsAccessKeyId", awsAccessKey);
hadoopConf.set("fs.s3.awsSecretAccessKey", awsSecretKey);
String tempFolder = "s3://bucket/folder";
rdd.saveAsTextFile(tempFolder);
FileSystem hdfs = FileSystem.get(new URI(tempFolder), hadoopConfig);
return FileUtil.copyMerge(hdfs, new Path(tempFolder), hdfs, new Path(dstPath), false, hadoopConfig, null);
}
該解決方案適用於S3或任何HDFS系統。 分兩步完成:
通過saveAsTextFile保存RDD,這會在文件夾中生成多個文件。
運行Hadoop“copyMerge”。
而不是收集和收集它給驅動程序,我寧願建議使用合並,這將有利於減少內存問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.