python - 如何有效合并 EMR 上的 Spark 输出文件?

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

Spark 作业(我认为)为每个分区创建一个文件,以便它可以处理故障等...,因此在作业结束时,您会留下一个文件夹,其中可以保留很多文件夹他们。这些文件会自动加载到 S3,那么有没有办法将它们合并到一个准备好加载到 Redshift 的压缩文件中?

最佳答案

代替下面的,它将在“my_rdd”中的每个分区写入一个未压缩的文件...

my_rdd.saveAsTextFile(destination)

一个人可以做...

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

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

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

关于python - 如何有效合并 EMR 上的 Spark 输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37332181/

相关文章:

apache-spark - Spark Kafka Direct DStream-如果设置了num-executors,则在yarn-cluster模式下有多少个执行器和RDD分区?

apache-spark - 使用 Kafka 进行 Spark 流式传输 - createDirectStream 与 createStream

python - 从文本文件中提取某些行

python - Pandas:将一行 boolean 值附加到 df 使用 `loc` 更改为 `int`

python - 在 shell 中创建多对多关系

amazon-web-services - 无法在 Cloudformation 模板中为 AWS::ApiGateway::Resource 指定资源标识符

ruby-on-rails - 安装 net-ssh (3.0.2) 时出错,Bundler 无法继续

python - 如何使用\r (Python) 替换上一行中的字符串

java - 使用映射器在 DynamoDB 上保存时出现 ValidationException

scala - Spark : calling a function inside of mapPartitionsWithIndex