Spark将多个分区中的文件压缩为具有较大文件的单个分区

时间:2018-04-11 16:56:52

标签: apache-spark partitioning

我想采用通过s3上的多个分区层展开的小拼花文件,然后将它们压缩成更大的文件,将单个分区压缩回s3。

所以在这个例子中,我有3个分区层(part1part2part3)。我想把这些数据写回来,只用part2

分区

我第一次使用时:

df = spark.read
.option("basePath", "s3://some_bucket/base/location/in/s3/")
.parquet("s3://some_bucket/base/location/in/s3/part1=*/part2=*/part3=*/")

df.write.partitionBy("part2").parquet("s3://some_bucket/different/location/")

这大部分都有用,但这似乎仍会创建较小的文件。由于我没有运行coalescerepartition。这让我想到了我的问题。有没有办法可以根据大小/行数轻松地将这些文件压缩成更大的文件?

提前致谢!

1 个答案:

答案 0 :(得分:1)

  

有没有办法可以根据大小/行数轻松地将这些文件压缩成更大的文件?

不是真的。 Spark不提供任何可用于限制输出文件大小的实用程序,因为每个文件通常对应于单个分区。

repartitioning所用的partitionBy<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 相同的列是您最好的选择。