У меня есть папки 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 (), который создал эти файлы паркета. Любая идея о том, как можно захватить «ключ»?