動的フレームを使用して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は「上書き」モードをサポートしていませんが、この機能に取り組んでいます。
回避策として、DynamicFrameオブジェクトをSparkのDataFrameに変換し、Glueの代わりにsparkを使用して書き込むことができます。
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の場所にある「選択された」パーティションのみが更新されます。私の場合、DynamicFrameの「データ」に30個の日付パーティションがあります。
Glue 1.0を使用しています-Spark 2.4-Python 2。