Как динамически указать путь s3 с помощью клея?

amazon-web-services #amazon-s3 #aws-glue-spark #aws-glue-workflow

#amazon-web-services #amazon-s3 #aws-glue-spark #aws-glue-workflow

Вопрос:

Я записываю некоторые файлы из источника реляционной базы данных в s3 с помощью клея. Я бы хотел, чтобы путь s3 был в формате bucket_name / database / schema / table / year / month / day. Я считываю имя_заголовка, базу данных, схему, имя таблицы из файла конфигурации. Я хотел бы использовать эти параметры, считываемые из файла конфигурации, для динамического указания пути s3, в котором я сохраняю эти исходные файлы. Я записываю исходные файлы в s3 с помощью динамического фрейма клея.

В сценарии glue я указываю путь динамически как: s3_target_path = ‘s3://’ target_bucket_name ‘/’ база данных ‘/’ схема ‘/’ таблица ‘/’ год ‘/’ месяц ‘/’ день

Ответ №1:

Glue DynamicFrame поддерживает запись данных с именами разделов в стиле Hive ( key-value ). См. https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-writing:

connection_options = {"path": "$outpath", "partitionKeys": ["type"]},

В этом документе говорится, что вам необходимо преобразовать в Spark DataFrame , если вы хотите применить альтернативную схему разделения. Я никогда этого не делал, но я использовал RDD следующим образом:

  1. Используется map() для добавления ключа вывода (например: xxx/yyy/yyyy/mm/dd )
  2. Использовать groupBy() с этим ключевым полем
  3. Используйте forEach() с функцией для записи выходных файлов.