web-dev-qa-db-ja.com

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"のようなものはありますか?

11
Mateo Rod

現在、AWS Glueは「上書き」モードをサポートしていませんが、この機能に取り組んでいます。

回避策として、DynamicFrameオブジェクトをSparkのDataFrameに変換し、Glueの代わりにsparkを使用して書き込むことができます。

table.toDF()
  .write
  .mode("overwrite")
  .format("parquet")
  .partitionBy("var_1", "var_2")
  .save(output_dir)
13
Yuriy Bondaruk

プロセスで「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。

1
Zach