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 следующим образом:
- Используется
map()
для добавления ключа вывода (например:xxx/yyy/yyyy/mm/dd
) - Использовать
groupBy()
с этим ключевым полем - Используйте
forEach()
с функцией для записи выходных файлов.