从 AWS Glue 中的动态框架覆盖镶木地板文件
Overwrite parquet files from dynamic frame in AWS Glue
我使用动态框架在 S3 中编写镶木地板文件,但如果文件已经存在,我的程序会附加一个新文件而不是替换它。我用的句子是这样的:
glueContext.write_dynamic_frame.from_options(frame = table,
connection_type = "s3",
connection_options = {"path": output_dir,
"partitionKeys": ["var1","var2"]},
format = "parquet")
是否有类似 "mode":"overwrite"
的东西可以替换我的镶木地板文件?
目前 AWS Glue 不支持 'overwrite' 模式,但他们正在开发此功能。
作为解决方法,您可以将 DynamicFrame 对象转换为 spark 的 DataFrame 并使用 spark 而不是 Glue 编写它:
table.toDF()
.write
.mode("overwrite")
.format("parquet")
.partitionBy("var_1", "var_2")
.save(output_dir)
如果您不希望您的进程覆盖 "s3://bucket/table_name" 下的所有内容,您可以使用
spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
data.toDF()
.write
.mode("overwrite")
.format("parquet")
.partitionBy("date", "name")
.save("s3://folder/<table_name>")
这只会更新该 S3 位置中的 "selected" 分区。就我而言,我的 DynamicFrame "data".
中有 30 个日期分区
我正在使用 Glue 1.0 - Spark 2.4 - Python 2.
我使用动态框架在 S3 中编写镶木地板文件,但如果文件已经存在,我的程序会附加一个新文件而不是替换它。我用的句子是这样的:
glueContext.write_dynamic_frame.from_options(frame = table,
connection_type = "s3",
connection_options = {"path": output_dir,
"partitionKeys": ["var1","var2"]},
format = "parquet")
是否有类似 "mode":"overwrite"
的东西可以替换我的镶木地板文件?
目前 AWS Glue 不支持 'overwrite' 模式,但他们正在开发此功能。
作为解决方法,您可以将 DynamicFrame 对象转换为 spark 的 DataFrame 并使用 spark 而不是 Glue 编写它:
table.toDF()
.write
.mode("overwrite")
.format("parquet")
.partitionBy("var_1", "var_2")
.save(output_dir)
如果您不希望您的进程覆盖 "s3://bucket/table_name" 下的所有内容,您可以使用
spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
data.toDF()
.write
.mode("overwrite")
.format("parquet")
.partitionBy("date", "name")
.save("s3://folder/<table_name>")
这只会更新该 S3 位置中的 "selected" 分区。就我而言,我的 DynamicFrame "data".
中有 30 个日期分区我正在使用 Glue 1.0 - Spark 2.4 - Python 2.