在 AWS Glue 中解压一个 zip 文件

Decompress a zip file in AWS Glue

我在 S3 存储桶中有一个压缩的 gzip 文件。这些文件将由客户端每天上传到 S3 存储桶。解压缩后的 gzip 将包含 10 个 CSV 格式的文件,但仅具有相同的架构。我需要解压缩 gzip 文件,并使用 Glue->Data crawler,需要在 运行 使用开发人员创建 ETL 脚本之前创建一个模式。端点。

glue 是否能够解压缩 zip 文件并创建数据目录。或者我们可以直接在 python ETL 脚本中使用的任何胶水库?或者我应该选择 Lambda/any 其他实用程序,以便在上传 zip 文件后,我 运行 一个实用程序来解压缩并作为 Glue 的输入提供?

感谢任何回复。

胶水可以解压。但这不是最佳的。由于 gzip 格式不可分割(这意味着只有一个执行者可以使用它)。更多信息 here

您可以尝试通过lambda解压并为新文件夹调用胶水爬虫。

使用gluecontext.create_dynamic_frame.from_options并在连接选项中提及压缩类型。类似地,输出也可以在写入 s3 时进行压缩。以下代码片段适用于 bzip,请将格式更改为 gz|gzip 并尝试。

我尝试了 glue 控制台 UI 中的 Target Location,发现将 dynamic_frames 写入 s3 时支持 bzip 和 gzip,并对生成的代码进行了更改以读取压缩文件从 s3。在文档中它不是直接可用的。

不确定效率。对于一个 400mb 压缩的 bzip 格式的 csv 文件,读取、映射转换、更改为数据帧并返回动态帧需要大约 180 秒 execution time。请注意 execution time 与控制台中显示的 start_time and end_time 不同。

datasource0 = glueContext.create_dynamic_frame
  .from_options('s3',
     {
       'paths': ['s3://bucketname/folder/filename_20180218_004625.bz2'],
       'compression':'bzip'
     },
     'csv',
     {
       'separator': ';'
     }
  )