我在S3存储桶中有一个压缩的gzip文件。这些文件将由客户端每天上传到S3存储桶。未压缩时的gzip将包含CSV格式的10个文件,但仅具有相同的模式。我需要解压缩gzip文件,并使用Glue-> Data crawler,需要在使用dev运行ETL脚本之前创建一个模式。端点。
胶水是否能够解压缩zip文件并创建数据目录。或者我们可以直接在python ETL脚本中使用的任何胶水库?或者我应该选择Lambda /任何其他实用程序,以便在上传zip文件后,我运行一个实用程序来解压缩并提供作为Glue的输入?
感谢所有回复。
答案 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': ';'
}
)