【问题标题】:How to merge multiple parquet files in Glue如何在 Glue 中合并多个镶木地板文件
【发布时间】:2019-04-01 19:06:07
【问题描述】:

我有胶水作业,每 6 秒在 S3 中写入镶木地板文件,而 S3 在那一小时内有文件夹。在一小时结束时,我想合并该小时分区中的所有文件,然后将其放在同一位置。我不想使用 Athena 表,因为工作变慢了。我正在尝试使用 Python Shell。但因此我还没有找到正确的解决方案。有人可以帮我解决这个问题吗?

文件也被快速压缩

【问题讨论】:

    标签: pandas boto3 aws-glue pyarrow


    【解决方案1】:

    取决于您的 Parquet 文件有多大,以及目标大小是多少——这里有一个不使用 Glue 的想法:

    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 中自己执行。

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2018-04-19
      • 2017-04-14
      • 1970-01-01
      • 2018-01-21
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      相关资源
      最近更新 更多