AWS Glue 用分区写镶木地板
AWS Glue write parquet with partitions
我能够写入 parquet 格式并按这样的列进行分区:
jobname = args['JOB_NAME']
#header is a spark DataFrame
header.repartition(1).write.parquet('s3://bucket/aws-glue/{}/header/'.format(jobname), 'append', partitionBy='date')
但我无法使用 Glue 的 DynamicFrame 执行此操作。
header_tmp = DynamicFrame.fromDF(header, glueContext, "header")
glueContext.write_dynamic_frame.from_options(frame = header_tmp, connection_type = "s3", connection_options = {"path": 's3://bucket/output/header/'}, format = "parquet")
我试过将 partitionBy
作为 connection_options
dict 的一部分传递,因为 AWS 文档说 parquet Glue 不支持任何格式选项,但这没有用。
这可能吗,怎么办?至于这样做的原因,我认为工作书签需要工作,因为目前这对我不起作用。
来自 AWS Support(稍微解释一下):
截至今天,Glue 在写入 parquet 时不支持 partitionBy 参数。不过,这仍在进行中。
使用 Glue API 写入 parquet 需要 作业书签功能才能与 S3 源一起使用。
所以从今天开始,无法对 parquet 文件进行分区 AND 启用作业书签功能。
编辑:今天 (3/23/18) 我在 documentations 中找到:
glue_context.write_dynamic_frame.from_options(
frame = projectedEvents,
connection_options = {"path": "$outpath", "partitionKeys": ["type"]},
format = "parquet")
该选项可能一直存在,但我和 AWS 支持人员都错过了它,或者它是最近才添加的。无论哪种方式,现在看来都是可能的。
我使用数据框中的一些列作为 partionkeys 对象:
glueContext.write_dynamic_frame \
.from_options(
frame = some_dynamic_dataframe,
connection_type = "s3",
connection_options = {"path":"some_path", "partitionKeys": ["month", "day"]},
format = "parquet")
我能够写入 parquet 格式并按这样的列进行分区:
jobname = args['JOB_NAME']
#header is a spark DataFrame
header.repartition(1).write.parquet('s3://bucket/aws-glue/{}/header/'.format(jobname), 'append', partitionBy='date')
但我无法使用 Glue 的 DynamicFrame 执行此操作。
header_tmp = DynamicFrame.fromDF(header, glueContext, "header")
glueContext.write_dynamic_frame.from_options(frame = header_tmp, connection_type = "s3", connection_options = {"path": 's3://bucket/output/header/'}, format = "parquet")
我试过将 partitionBy
作为 connection_options
dict 的一部分传递,因为 AWS 文档说 parquet Glue 不支持任何格式选项,但这没有用。
这可能吗,怎么办?至于这样做的原因,我认为工作书签需要工作,因为目前这对我不起作用。
来自 AWS Support(稍微解释一下):
截至今天,Glue 在写入 parquet 时不支持 partitionBy 参数。不过,这仍在进行中。
使用 Glue API 写入 parquet 需要 作业书签功能才能与 S3 源一起使用。
所以从今天开始,无法对 parquet 文件进行分区 AND 启用作业书签功能。
编辑:今天 (3/23/18) 我在 documentations 中找到:
glue_context.write_dynamic_frame.from_options(
frame = projectedEvents,
connection_options = {"path": "$outpath", "partitionKeys": ["type"]},
format = "parquet")
该选项可能一直存在,但我和 AWS 支持人员都错过了它,或者它是最近才添加的。无论哪种方式,现在看来都是可能的。
我使用数据框中的一些列作为 partionkeys 对象:
glueContext.write_dynamic_frame \
.from_options(
frame = some_dynamic_dataframe,
connection_type = "s3",
connection_options = {"path":"some_path", "partitionKeys": ["month", "day"]},
format = "parquet")