如何在Glue中合并多个实木复合地板文件

时间:2019-04-01 19:06:08

标签: pandas boto3 aws-glue pyarrow

我有Glue作业,该作业每6秒在S3中写入一个实木复合地板文件,并且S3在那个小时内都具有文件夹。在小时结束时,我想合并该小时分区中的所有文件,然后将其放在相同的位置。我不想使用Athena表,因为工作变慢了。我正在尝试使用Python Shell。但是对于我来说,没有找到正确的解决方案。有人可以帮我吗?

文件也可以快速压缩

1 个答案:

答案 0 :(得分:0)

取决于Parquet文件的大小以及目标大小是多少–在没有胶水的情况下,可以这样做:

  1. 设置每小时的Cloudwatch cron规则以查找前一个文件的目录以调用Lambda函数。
  2. 打开每个Parquet文件,并将它们写入新的Parquet文件。
  3. 将生成的Parquet文件写入S3键并删除零件。

请注意,此设计有一些限制/注意事项:

  1. 您的Parquet文件需要保持在Lambda存储容量的范围内。如果您的目标是达到128mb,那么您应该可以实现这一目标
  2. 您单独的Parquet模式必须相同,才能可靠地“合并”它们。如果不是,则需要查看包含模式的Parquet文件的元数据页脚,以确保该模式具有所有列块的元数据。
  3. 由于S3操作不是原子操作,因此您可能会短暂地上传新的S3 Parquet对象,但尚未删除旧对象。如果您不需要在此窗口中查询它,那应该没问题。

如果您特别需要Glue,则可以只从Lambda调用Glue作业,而不必自己在Lambda内部进行。