У меня есть контейнер Azure Data Lake Storage, который служит целевой областью для файлов JSON для обработки Apache Spark.
Там десятки тысяч маленьких (до нескольких мегабайт) файлов. Код Spark регулярно читает эти файлы и выполняет некоторые преобразования.
Я хочу, чтобы файлы читались ровно один раз, а скрипт Spark был идемпотентным. Как сделать так, чтобы файлы не читались снова и снова? Как сделать это эффективно?
Я читаю данные так:
spark.read.json("/mnt/input_location/*.json")
Я думал о следующих подходах:
- Создайте дельта-таблицу с именами файлов, которые уже были обработаны, и запустите преобразование EXCEPT во входном кадре данных.
- Переместите обработанные файлы в другое место (или переименуйте их). Я бы предпочел этого не делать. В случае, если мне нужно повторно обработать данные, мне нужно снова запустить переименование, эта операция занимает много времени.
Я надеюсь, что есть лучший способ. Пожалуйста, предложите что-нибудь.