Amazon web services 在AWS Glue中覆盖动态框架中的拼花地板文件

Amazon web services 在AWS Glue中覆盖动态框架中的拼花地板文件,amazon-web-services,parquet,aws-glue,Amazon Web Services,Parquet,Aws Glue,我使用动态框架在S3中编写拼花地板文件,但如果文件已经存在,我的程序会附加一个新文件,而不是替换它。我用的句子是: glueContext.write_dynamic_frame.from_options(frame = table, connection_type = "s3", connection_options = {"pat

我使用动态框架在S3中编写拼花地板文件,但如果文件已经存在,我的程序会附加一个新文件,而不是替换它。我用的句子是:

glueContext.write_dynamic_frame.from_options(frame = table,
                                         connection_type = "s3",
                                         connection_options = {"path": output_dir,
                                                               "partitionKeys": ["var1","var2"]},
                                         format = "parquet")

是否有类似于“模式”的内容:“覆盖”替换我的拼花地板文件?

目前AWS Glue不支持“覆盖”模式,但他们正在使用此功能

作为一种解决方法,您可以将DynamicFrame对象转换为spark的数据帧,并使用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>")
spark.conf.set(“spark.sql.sources.partitionOverwriteMode”,“动态”)
data.toDF()
写
.mode(“覆盖”)
.格式(“拼花地板”)
.分割人(“日期”、“名称”)
.save(“s3://文件夹/”)
这将只更新该S3位置中的“选定”分区。在我的例子中,我的DynamicFrame“data”中有30个日期分区


我使用的是Glue 1.0-Spark 2.4-Python2。

在保存新的拼花文件之前,可以删除存在拼花文件的现有路径


您可以使用简单的python boto3代码进行删除。

谢谢您的回答!这会替换分区中的所有现有文件吗?或者只是那些名称冲突的文件?它将覆盖所有文件谢谢,在看到spark.conf.set的用法之前,我无法正常工作。