Добавить груз в AWS Glue

Мне нужно выполнить дополнительную загрузку в S3 Bucket.

  1. Каждый день новый файл.gz сбрасывается в папку S3, и сканер клея считывает данные и обновляет их в каталоге данных.
  2. Задание Scala AWS Glue выполняется и фильтрует данные только за текущий день.
  3. Отфильтрованные выше данные преобразуются в соответствии с некоторыми правилами, и создается разделенный динамический фрейм данных (т. Е. Год, месяц, день).

Теперь мне нужно записать этот динамический фрейм данных в корзину S3, в которой присутствуют все разделы предыдущего дня. Фактически мне просто нужно записать только один раздел в корзину S3. В настоящее время я использую приведенный ниже фрагмент кода для записи данных в корзину S3.

// Write it out in Parquet for ERROR severity   
    glueContext.getSinkWithFormat(
    connectionType = "s3",
    options = JsonOptions(Map("path" -> "s3://some s3 bucket location", 
    "partitionKeys" -> Seq("partitonyear","partitonmonth","partitonday"))),
     format = "parquet").writeDynamicFrame(DynamicFrame(dynamicDataframeToWrite.toDF().coalesce(maxExecutors), glueContext)) 

Я не уверен, будет ли вышеуказанный фрагмент кода выполнять добавочную загрузку или нет. Есть ли способ через библиотеки склеивания AWS добиться того же?

1 ответ

Ваш скрипт добавит новые файлы данных в соответствующий раздел. Так что, если вы обрабатываете только сегодняшние данные, он создаст новый раздел данных под path, Например, если сегодня 2018-11-28, он создаст новый объект данных в s3://some_s3_bucket_location/partitonyear=2018/partitonmonth=11/partitonday=28/ папка.

Если вы попытаетесь записать данные в существующий раздел, то Glue добавит новые файлы и не удалит существующие объекты. Однако это может привести к дублированию, если запускать задание несколько раз для обработки одних и тех же данных.

Другие вопросы по тегам