Перезаписать файлы паркета из динамической рамки в 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" для замены моих паркетных файлов?


person Mateo Rod    schedule 24.08.2018    source источник


Ответы (3)


В настоящее время AWS Glue не поддерживает режим перезаписи, но они работают над этой функцией.

В качестве обходного пути вы можете преобразовать объект DynamicFrame в DataFrame искры и записать его, используя искру вместо Glue:

table.toDF()
  .write
  .mode("overwrite")
  .format("parquet")
  .partitionBy("var_1", "var_2")
  .save(output_dir)
person Yuriy Bondaruk    schedule 25.08.2018
comment
Спасибо за Ваш ответ! - person Mateo Rod; 27.08.2018
comment
Заменит ли это все существующие файлы в разделе? Или только с конфликтующими именами? - person Frans; 06.05.2019
comment
Он перезапишет все файлы - person Yuriy Bondaruk; 06.05.2019

Если вы не хотите, чтобы ваш процесс перезаписывал все, что находится под "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. В моем случае у меня есть 30 разделов даты в моих "данных" DynamicFrame.

Я использую Glue 1.0 - Spark 2.4 - Python 2.

person Zach    schedule 23.08.2019
comment
Спасибо, я не мог нормально работать, пока не увидел, как вы используете spark.conf.set. - person sevencontinents; 01.11.2020

Вы можете удалить существующий путь, по которому находятся паркетные файлы, перед сохранением новых паркетных файлов.

Вы можете удалить, используя простой код python boto3.

person mayank gupta    schedule 12.03.2021