【发布时间】:2016-09-16 20:42:11
【问题描述】:
Spark 作业(我认为)为每个分区创建一个文件,以便它可以处理故障等...,因此在作业结束时,您会留下一个文件夹,其中可以保留很多文件夹他们。这些会自动加载到 S3,那么有没有办法将它们合并成一个压缩文件,准备好加载到 Redshift?
【问题讨论】:
标签: python amazon-web-services apache-spark pyspark
Spark 作业(我认为)为每个分区创建一个文件,以便它可以处理故障等...,因此在作业结束时,您会留下一个文件夹,其中可以保留很多文件夹他们。这些会自动加载到 S3,那么有没有办法将它们合并成一个压缩文件,准备好加载到 Redshift?
【问题讨论】:
标签: python amazon-web-services apache-spark pyspark
而不是下面的,它将在“my_rdd”中每个分区写入一个未压缩的文件...
my_rdd.saveAsTextFile(destination)
可以做...
my_rdd.repartition(1).saveAsTextFile(destination, compressionCodecClass=“org.apache.hadoop.io.compress.GzipCodec”)
这会将所有分区中的数据发送到集群中的一个特定工作节点,以组合成一个大分区,然后将其写入单个 gzip 压缩文件。
但是,我认为这不是解决问题的理想方法。只有一个线程写出并压缩单个结果文件。如果该文件很大,则可能需要“永远”。集群中的每个核心都处于空闲状态,只有一个。 Redshift 不需要所有内容都在一个文件中。 Redshift 可以轻松处理加载一组文件 --- 将 COPY 与“清单文件”或“前缀”一起使用:Using the COPY Command to Load from S3。
【讨论】: