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