我有胶水作业,它每 3 秒在 S6 中写入一次镶木地板文件,而 S3 有该小时的文件夹。在一小时结束时,我想合并该小时分区中的所有文件,然后将其放在同一位置。我不想使用雅典娜表,因为工作变得很慢。我正在尝试使用Python Shell。但是,因为我还没有找到正确的解决方案。有人可以帮助我吗?
文件也是活泼的压缩
根据 Parquet 文件的大小以及目标大小 - 这里有一个在没有 Glue 的情况下执行此操作的想法:
- 设置每小时一次的 Cloudwatch cron 规则,以查找上一个文件的目录以调用 Lambda 函数。 打开每个镶木地板文件
- ,并将它们写入新的镶木地板文件。
- 将生成的 Parquet 文件写入 S3 密钥并移除部件。
请注意,此设计存在一些限制/注意事项:
- 您的 Parquet 文件需要保持在 Lambda 内存容量的限制范围内。如果您的目标是获得 128mb 的部分,您应该能够实现这一目标
- 单独的 Parquet 架构需要相同,才能可靠地"合并"它们。如果不是,则需要查看包含架构的 Parquet 文件的元数据页脚,以确保架构具有所有列块的元数据。 由于 S3 操作
- 不是原子操作,因此您可能会有短暂的时间上传新的 S3 Parquet 对象,但尚未删除旧对象。如果您不需要在此窗口中查询它,那应该不是问题。
如果您特别需要 Glue,您可能只从 Lambda调用 Glue 作业,而不是尝试从 Lambda 中自己完成。