AWS Glue - Pick Dynamic File - PullRequest
       9

AWS Glue - Pick Dynamic File

0 голосов
/ 29 сентября 2018

Кто-нибудь знает, как получить динамический файл из корзины S3?Я установил сканер на ведро S3, однако моя проблема в том, что каждый день будут появляться новые файлы с суффиксом ГГГГ-ММ-ДД-ЧЧ-ММ-СС.

Когда я читаю таблицу через каталог, он читает все файлы, представленные в каталоге?Можно ли динамически выбирать последние три файла для данного дня и использовать его в качестве источника?

Спасибо!

1 Ответ

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

Вам не нужно перезапускать сканер, если файлы находятся в одном месте.Например, если ваша папка данных s3://bucket/data/<files>, вы можете добавить в нее новые файлы и запустить задание ETL - новые файлы будут автоматически выбраны.

Однако, если данные поступают в новые разделы (подпапки), такие как s3://bucket/data/<year>/<month>/<day>/<files>, вам нужно либо запустить сканер, либо выполнить MSCK REPAIR TABLE <catalog-table-name> в Афине, чтобы зарегистрировать новые разделы в каталоге Glue перед запуском задания Glue ETL..

Когда данные загружаются в DynamicFrame или DataFrame spark, вы можете применить некоторые фильтры для использования только необходимых данных.Если вы все еще хотите работать с именами файлов, вы можете добавить его в виде столбца, используя функцию input_file_name spark, а затем применить фильтрацию:

from pyspark.sql.functions import col, input_file_name

df.withColumn("filename", input_file_name)
  .where(col("filename") == "your-filename")

Если вы контролируете, как поступают файлы, я быПредложите поместить их в разделы (подпапки с указанием даты, т.е. /data/<year>/<month>/<day>/ или просто /data/<year-month-day>/), чтобы вы могли извлечь выгоду из использования предикатов pushdown в AWS Glue

...