Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在EMR上有效合并Spark输出文件?_Python_Amazon Web Services_Apache Spark_Pyspark - Fatal编程技术网

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

Python 如何在EMR上有效合并Spark输出文件?,python,amazon-web-services,apache-spark,pyspark,Python,Amazon Web Services,Apache Spark,Pyspark,Spark jobs(我认为)为每个分区创建一个文件,以便它可以处理故障等,因此在作业结束时,您将得到一个文件夹,其中可以有许多文件夹。这些文件将自动加载到S3,那么有没有办法将它们合并到一个压缩文件中,以便加载到Redshift?而不是下面的方法,它将在“my_rdd”中为每个分区写入一个未压缩的文件 一个人可以做 my_rdd.repartition(1).saveAsTextFile(destination, compressionCodecClass=“org.apache.hadoop

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

而不是下面的方法,它将在“my_rdd”中为每个分区写入一个未压缩的文件

一个人可以做

my_rdd.repartition(1).saveAsTextFile(destination, compressionCodecClass=“org.apache.hadoop.io.compress.GzipCodec”)
这会将所有分区中的数据发送到集群中的一个特定工作节点,将其合并到一个大分区中,然后将其写入一个gzip压缩文件中

然而,我不认为这是一个理想的解决问题的办法。只有一个线程写出并压缩单个结果文件。如果该文件很大,可能需要“永远”。群集中的每个核心都处于空闲状态,只有一个。Redshift不需要将所有内容都放在一个文件中。Redshift可以轻松地处理加载一组文件——使用带有“清单文件”或“前缀”的副本:

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