使用s3-dist-cp合并镶木地板文件

时间:2017-12-15 18:15:58

标签: emr parquet s3distcp

只是想知道是否可以使用s3-dist-cp工具来合并镶木地板文件(snappy压缩)。我试过" - groupBy"和" - targetSize"选项,它确实将小文件合并为更大的文件。但我无法在Spark或AWS Athena中阅读它们。 在aws athena我得到了以下错误:

HIVE_CURSOR_ERROR: Expected 246379 values in column chunk at s3://tbw-analytics/parquet/auctions/region=us/year=2017/month=1/day=1/output123 offset 4 but got 247604 values instead over 1 pages ending at file offset 39

This query ran against the "beeswaxauctionlogdatabase" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: 4ff77c55-3b69-414d-8fd9-a3d135f5ff2f.

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

Parquet文件具有重要结构。 This page详细介绍了它,但结果是元数据像zip文件一样存储在最后,并且连接Parquet文件会破坏它们。要合并Parquet文件,您需要使用Spark,它能理解Parquet的文件格式。

答案 1 :(得分:0)

根据AWS docs

  

S3DistCp不支持Parquet文件的串联

请注意,该网站上的建议是在写入之前先将文件读入Spark DataFrame,然后再写入coalesce(n),这对于大型数据集可能会带来重大挑战,如{{ 3}}:

  

如果您要进行剧烈的合并,例如到numPartitions = 1,这可能会导致您的计算在少于您希望的节点上进行(例如,在numPartitions = 1的情况下为一个节点)。