【问题标题】:Decompress a zip file in AWS Glue在 AWS Glue 中解压缩 zip 文件
【发布时间】:2018-08-03 20:37:51
【问题描述】:

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

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

感谢任何回复。

【问题讨论】:

    标签: amazon-web-services aws-glue


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢 Natalia,我接受你的回答,因为我正在寻找 Glue 减压的是/否确认,而你的回答是肯定的。您是否有任何代码 sn-p 或使用 Glue 应用解压缩的程序。我有一个用例,正在寻找一些解决方案,如果有帮助,我可以试试。
    【解决方案2】:

    使用gluecontext.create_dynamic_frame.from_options 并在连接选项中提及压缩类型。同样,输出也可以在写入 s3 时进行压缩。下面的 sn-p 适用于bzip,请将格式更改为gz|gzip 并尝试。

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

    不确定效率。 execution time 花了大约 180 秒的时间来读取、映射转换、更改为数据帧并返回动态帧以获取 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': ';'
         }
      )
    

    【讨论】:

    • 嘿@Arun,我需要使用GZIP,它不是CSV文件,分隔符是空格而不是;。我想你的 sn-p 可以帮助我,但老实说我不知道​​该放在哪里。我从胶水开始。它是 UI 爬虫中的一些选项吗?
    • @LaerteJunior 对于空格分隔符:'',制表符 - 分隔符:'/t' 可以使用。将有一个脚本将在其中自动生成的 UI,或者您可以实现自己的脚本。在脚本中,您可以使用给定的 sn-p 更改数据源代码。
    • 谢谢我的朋友,我会尽力找到它。只是在爬虫中的一个问题?
    • 1.答案中的代码 sn-p 可以通过在左侧菜单中选择 ETL 和必要字段来创建作业来使用。之后,将创建一个代码 sn-p。在该代码 sn-p 中,我们需要进行更改以从该 zip 中获取数据并将空间用作过滤器。 2.爬虫只是用来创建关于s3中数据的元数据。没有 zip 配置的爬虫可以爬取和创建压缩文件的元数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多