У меня есть файлы CSV из нескольких путей, которые не являются родительскими каталогами в корзине s3. Все таблицы имеют одинаковые ключи разделов.
каталог s3:
table_name_1/partition_key_1 = <pk_1>/partition_key_2 = <pk_2>/file.csv
table_name_2/partition_key_1 = <pk_1>/partition_key_2 = <pk_2>/file.csv
...
Мне нужно преобразовать эти файлы csv в файлы parquet и сохранить их в другом ведре s3 с такой же структурой каталогов.
каталог другого s3:
table_name_1/partition_key_1 = <pk_1>/partition_key_2 = <pk_2>/file.parquet
table_name_2/partition_key_1 = <pk_1>/partition_key_2 = <pk_2>/file.parquet
...
У меня есть решение: перебирать ведро s3 и находить файл CSV, преобразовывать его в паркет и сохранять на другой путь S3. Я считаю, что этот способ неэффективен, потому что у меня есть al oop, и я конвертировал один файл в один файл.
Я хочу использовать библиотеку Spark для повышения эффективности. Затем я попробовал:
spark.read.csv('s3n://bucket_name/table_name_1/').write.partitionBy('partition_key_1', 'partition_key_2').parquet('s3n://another_bucket/table_name_1')
Этот способ хорошо работает для каждой таблицы, но для большей его оптимизации я хочу взять table_name в качестве параметра, например:
TABLE_NAMES = [table_name_1, table_name_2, ...]
spark.read.csv('s3n://bucket_name/{*TABLE_NAMES}/').write.partitionBy('partition_key_1', 'partition_key_2').parquet('s3n://another_bucket/{*TABLE_NAMES}')
Спасибо