在AWS Glue中解压缩zip文件

时间:2018-02-23 18:01:37

标签: amazon-web-services aws-glue

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

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

感谢所有回复。

2 个答案:

答案 0 :(得分:3)

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

您可以尝试通过lambda解压缩并为新文件夹调用glue crawler。

答案 1 :(得分:2)

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

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

不确定效率。它需要大约180秒的execution time来读取,映射转换,更改为数据帧并返回动态帧,以获得bzip格式的400mb压缩csv文件。请注意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': ';'
     }
  )