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 中的 JDBC 编目连接加载部分数据?