Читайте файлы паркета из папки S3, используя подстановочный знак - PullRequest
1 голос
/ 27 февраля 2020

У меня есть папки S3, как показано ниже, каждая с паркетными файлами:

s3: // bucket / folder1 / folder2 / 2020-02-26-12 / key = Boston_20200226 /

s3 : // bucket / folder1 / folder2 / 2020-02-26-12 / key = Springfield_20200223 /

s3: // bucket / folder1 / folder2 / 2020-02-26-12 / key = Toledo_20200226 /

s3: // bucket / folder1 / folder2 / 2020-02-26-12 / key = Philadelphia_20191203 /

Моя цель - иметь возможность открывать файлы паркета из папок * *20200226 только.

Я использую FOR l oop, чтобы сначала собрать список / массив всех файлов, а затем передать его в операцию READ в DF в версии 2.4.

s3_files = []
PREFIX = "folder1/folder2/"
min_datetime = current_datetime - timedelta(hours=72)
while current_datetime >= min_datetime:
    each_hour_prefix = min_datetime.strftime('%Y-%m-%d-%H')
    if any(fname.key.endswith('.parquet') for fname in s3_bucket.objects.filter(Prefix=(PREFIX + each_hour_prefix))):
        s3_files.append('s3://{bucket}/{prefix}'.format(bucket=INPUT_BUCKET_NAME, prefix=(PREFIX + each_hour_prefix + '/*')))
    min_datetime = min_datetime + timedelta(hours=1)


spark.read.option('basePath',('s3://' + INPUT_BUCKET_NAME)).schema(fileSchema).parquet(*s3_files) 

где fileSchema - это структура схемы файлов паркета, s3_files - это массив всех файлов, которые я выбрал, просматривая папки S3 выше. Вышеуказанное FOR l oop работает, но моя цель - читать только папки Boston_20200226 и Toledo_20200226. Можно ли выполнять поиск по шаблону, например, «folder1 / folder2 / 2020-02-26-12 / key = ** _ 20200226 *» или, возможно, каким-либо образом изменить команду «read.parquet»?

Спасибо за advance.

Обновление: Я прибегал к элементарному способу просмотра всех папок и поиска только тех файлов, которые соответствуют шаблону = '20200226' (не самый эффективный способ). Я собираю ключи в список, а затем читаю каждый файл паркета в DF и выполняю объединение в конце. Все работает отлично, кроме столбца «ключ» не читается в окончательном DF. Это часть кода partitionBy (), который создал эти файлы паркета. Любая идея о том, как можно захватить «ключ»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...