Pyspark 删除AWS Glue ETL作业中的选定日期分区

Pyspark 删除AWS Glue ETL作业中的选定日期分区,pyspark,aws-glue,Pyspark,Aws Glue,我已经使用AWS Glue Job(pySpark)设置了数据管道。作业由lambda函数触发,在执行relationalize之后,它将拼花文件写入日期分区。 有时,我正在重新处理同一日期分区,并希望在写入新文件之前删除以前写入的文件。有没有办法在作业中获取日期分区,以便可以首先删除以前写入的文件 我知道glue job会在某处维护日期分区,因为当我调用glueContext.write_dynamic_frame.from_options()时,它会正确地获取分区键。我需要知道作业当前在哪个

我已经使用AWS Glue Job(pySpark)设置了数据管道。作业由lambda函数触发,在执行relationalize之后,它将拼花文件写入日期分区。 有时,我正在重新处理同一日期分区,并希望在写入新文件之前删除以前写入的文件。有没有办法在作业中获取日期分区,以便可以首先删除以前写入的文件


我知道glue job会在某处维护日期分区,因为当我调用glueContext.write_dynamic_frame.from_options()时,它会正确地获取分区键。我需要知道作业当前在哪个日期分区上运行以删除文件。谢谢你的帮助。RF

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

作为一种解决方法,您可以将DynamicFrame对象转换为spark的数据帧,并使用spark而不是Glue来编写它。例如:

dynamic_frame.toDF()
  .write
  .mode("overwrite")
  .format("parquet")
  .partitionBy("date_col")
  .save(output_dir)

这将覆盖提供的分区中的文件,您不必担心显式清理分区。

您可以在这里发布pyspark脚本吗?这是我正在使用的Glue ETL代码。我希望能够删除日期分区中已经存在的文件,然后调用以下write:rootDataSink=glueContext.write\u dynamic\u frame.from\u options(frame=applymapping1,connection\u type=“s3”,connection\u options={“path”:rootPath,“partitionKeys”:[“date”]},format=“parquet”,transformation\u ctx=“datasink4”)