如何在EMR上有效地合并Spark输出文件?

时间:2016-05-19 19:13:54

标签: python amazon-web-services apache-spark pyspark

Spark作业(我认为)为每个分区创建一个文件,以便它可以处理失败等...,所以在作业结束时,你留下了一个文件夹,里面可以留下很多文件夹他们。这些是自动加载到S3,所以有没有办法将它们合并到一个可以加载到Redshift的压缩文件中?

1 个答案:

答案 0 :(得分:2)

而不是以下内容,它将在" my_rdd" ...

中为每个分区写一个未压缩文件
my_rdd.saveAsTextFile(destination)

有人可以......

my_rdd.repartition(1).saveAsTextFile(destination, compressionCodecClass=“org.apache.hadoop.io.compress.GzipCodec”)

这会将所有分区中的数据发送到群集中的一个特定工作节点,然后将其合并为一个大型分区,然后将其写入单个gzip压缩文件中。

但是,我不相信这是解决问题的理想方法。只有一个线程写出并压缩单个结果文件。如果该文件很大,则可能需要"永远"。集群中的每个核心都处于空闲状态但只有一个Redshift并不需要将所有内容都放在一个文件中。 Redshift可以轻松处理加载一组文件---使用COPY和#34;清单文件"或者"前缀":Using the COPY Command to Load from S3