Как избежать записи в AWS Glue пустых объектов в S3?
У меня есть Glue Job, который записывает полученный динамический фрейм в S3:
dynamic_frame = # result of Glue job processing
glue_context.write_dynamic_frame.from_options(
frame = dynamic_frame,
connection_type = 's3',
connection_options = {'path': 's3://some-bucket/some-path'},
format = 'json')
Однако, когда я проверяю содержимое корзины в S3, я вижу не только данные, но и множество объектов размером 0 B. Как я могу предотвратить это?
Я пробовал использовать класс DropNullFields (см. Ниже), но это не помогло.
dynamic_frame = # result of Glue job processing
non_null_fields = DropNullFields.apply(dynamic_frame)
glue_context.write_dynamic_frame.from_options(
frame = non_null_fields,
connection_type = 's3',
connection_options = {'path': 's3://some-bucket/some-path'},
format = 'json')
Aws Glue - это оболочка для Apache Spark. Обычно Spark записывает столько файлов, сколько разделы. Если он пишет пустые файлы, это означает, что у вас есть пустые разделы. Способ сделать это - переразбить ваш dynamic_frame на меньшие разделы. В Spark DataFrames вы должны использовать функцию «coalesce».
В Glue вы можете попробовать использовать функцию повторного разбиения: https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-dynamicframe-class.html#glue-etl-scala-apis-glue-dynamicframe-class-defs- передел