AWS Glue - GlueContext:从 S3 读取分区数据,将分区添加为 DynamicFrame 的列

Posted

技术标签:

【中文标题】AWS Glue - GlueContext:从 S3 读取分区数据,将分区添加为 DynamicFrame 的列【英文标题】:AWS Glue - GlueContext: read partitioned data from S3, add partitions as columns of DynamicFrame 【发布时间】:2020-02-26 11:50:54 【问题描述】:

我有一些数据以 parquet 格式存储在 S3 存储桶中,采用类似配置单元的分区样式,具有以下分区键:零售商 - 年 - 月 - 日。

例如

my-bucket/
   retailer=a/
         year=2020/
         ....
   retailer=b/
         year=2020/
            month=2/
         ...

我想在 sagemaker 笔记本中读取所有这些数据,并且我希望将分区作为我的 DynamicFrame 的列,这样当我 df.printSchema() 时,它们就会被包含在内。

如果我使用 Glue 建议的方法,分区不会包含在我的架构中。这是我正在使用的代码:

df = glueContext.create_dynamic_frame.from_options(
    connection_type='s3',
    connection_options=
        'paths': ['s3://my-bucket/'],
        "partitionKeys": [
            "retailer",
            "year",
            "month",
            "day"
        ]
    ,
    format='parquet'
)

通过使用普通的 spark 代码和 DataFrame 类,它可以工作,并且分区会包含在我的架构中:

df = spark.read.parquet('s3://my-bucket/').

我想知道是否有办法使用 AWS Glue 的特定方法来做到这一点。

【问题讨论】:

【参考方案1】:

也许你可以尝试抓取数据并使用 from_catalog 选项读取它。虽然我认为 U 不需要提及分区键,因为它应该看到 = 表示它是一个分区。特别是考虑到胶水只是火花的包装

【讨论】:

我后来尝试了不带分区和不带分区,但它产生了零差异。我最终只使用了 spark.read,它是一次性的操作,所以它不需要太复杂。我只是好奇 Glue 是否可以处理这种情况。

以上是关于AWS Glue - GlueContext:从 S3 读取分区数据,将分区添加为 DynamicFrame 的列的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue - 是不是使用爬虫

从 AWS Glue 读取 Netezza 时连接超时

如何从 AWS Glue 中的 JDBC 编目连接加载部分数据?

AWS Glue 数据从 S3 迁移到 Redshift

使用 Glue 连接和 spark scala 覆盖 Mysql 表

AWS GlueContext 未初始化