簡體   English   中英

saveAsTextFile()將最終的RDD寫為單個文本文件--Apache Spark

[英]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系統。 分兩步完成:

  1. 通過saveAsTextFile保存RDD,這會在文件夾中生成多個文件。

  2. 運行Hadoop“copyMerge”。

而不是收集和收集它給驅動程序,我寧願建議使用合並,這將有利於減少內存問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM