У меня есть S3, где хранятся все файлы в разных форматах и с разных клиентов и поступают новые файлы.
Файлы с разных клиентов хранятся в подпапке CLIENT_ID
.Внутри этих подпапок файлы имеют одинаковый формат.Но от папки к папке формат файла может отличаться.Например, в папке CLIENT_1
у нас есть файлы CSV, разделенные ","
, в CLIENT_2 у нас есть файлы CSV, разделенные "|"
, в CLIENT_N
у нас есть файлы JSON и т. Д.
Я могу иметьтысячи таких папок, и мне нужно отслеживать / ETL все из них (обрабатывать существующие файлы и непрерывно обрабатывать вновь поступившие файлы в этих папках).После ETL этих файлов я хочу получить нормализованную информацию в моем общем формате и сохранить ее где-нибудь в базе данных в общей таблице.
Посоветуйте, пожалуйста, как правильно реализовать эту архитектуру с AWS и Apache Spark.
Полагаю, я могу попытаться реализовать это с помощью Spark Streaming и соединителя Databricks S3-SQS https://docs.databricks.com/spark/latest/structured-streaming/sqs.html, но я не понимаю, где должна располагаться логика преобразования при использовании соединителя Databricks S3-SQS.
Также неясно, или я могу отслеживать различные папки S3 с помощью разъема Databricks S3-SQS и предоставлять различные конфигурации spark.readStream
, чтобы можно было загружать файлы с различными схемами и форматами файлов.
Также полезно иметь тысячи различных spark.readStream
экземпляров, которые будут независимо контролировать тысячи папок AWS S3, например:
spark.readStream \
.format("s3-sqs") \
.option("fileFormat", "json") \
.option("queueUrl", ...) \
.schema(...) \
.load()
Пожалуйста, сообщите.Я буду очень признателен за любую помощь в этом.Спасибо!