AWS Glue - предотвращение пустого экспорта в S3 - PullRequest
0 голосов
/ 07 сентября 2018

Как можно избежать того, чтобы AWS Glue записывал пустые объекты в S3?

У меня есть задание на клей, которое записывает полученный динамический кадр в 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')

1 Ответ

0 голосов
/ 09 октября 2018

Aws Glue - это оболочка вокруг Apache Spark. Обычно Spark записывает столько файлов, сколько разделов. Если он пишет пустые файлы, это означает, что у вас есть пустые разделы. Способ сделать это - перераспределить ваш динамический_фрейм на более мелкие разделы. С Spark DataFrames вы бы использовали функцию "объединения".

В 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-repartition

...