Leo*_*ard 7 hadoop scala apache-spark
我用下一个代码:
csv.saveAsTextFile(pathToResults, classOf[GzipCodec])
Run Code Online (Sandbox Code Playgroud)
pathToResults目录有很多文件,如part-0000,part-0001等.我可以使用FileUtil.copyMerge(),但它真的很慢,它下载驱动程序上的所有文件,然后将它们上传到hadoop.但FileUtil.copyMerge()比以下更快:
csv.repartition(1).saveAsTextFile(pathToResults, classOf[GzipCodec])
Run Code Online (Sandbox Code Playgroud)
如何在没有重新分区和FileUtil.copyMerge()的情况下合并spark结果文件?
不幸的是,没有其他选项可以在Spark中获取单个输出文件.而不是repartition(1)你可以使用coalesce(1),但与参数1他们的行为将是相同的.Spark会在内存中的单个分区中收集您的数据,如果您的数据太大,可能会导致OOM错误.
在HDFS上合并文件的另一个选择可能是编写一个简单的MapReduce作业(或Pig作业或Hadoop Streaming作业),它将整个目录作为输入,并使用单个reducer生成单个输出文件.但请注意,使用MapReduce方法,所有数据都将首先复制到reducer本地文件系统,这可能会导致"空间不足"错误.
以下是同一主题的一些有用链接:
| 归档时间: |
|
| 查看次数: |
15251 次 |
| 最近记录: |