Как проверить поврежденный файл при чтении файлов паркета? - PullRequest
1 голос
/ 16 мая 2019

У меня есть некоторые проблемы при чтении паркетов из hdf, которые периодически создаются моими программами.Таким образом, он может произвести некоторые поврежденные файлы, если программа по какой-то причине выйдет из строя.

Теперь я хочу отличить поврежденные файлы от обычных и перейти в каталог резервного копирования.Но я не могу найти хороший способ сделать это.

Есть два вида поврежденных файлов, с которыми я встречался:

1.parquet is not a Parquet file (too small length: 4)

В этом случае это легко определить из-за егоразмер

2.parquet is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [56, 52, 53, 51]

В этом случае я понятия не имею, отличать это от обычных до чтения.

Я прочитал этот веб-сайт: https://datameer.zendesk.com/hc/en-us/articles/360006392072-Workbook-Fails-path-to-file-Is-Not-a-Parquet-File-Expected-Magic-Number-at-Tail

В соответствии с ним, "это будет меньше, чем у другого файла на месте.>, Но я пока не могу его найти.

Есть ли какое-нибудь хорошее решение, чтобы справиться с этим? Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Обе ошибки указывают на то, что файл паркета не был правильно закрыт во время записи. Вместо проверки на повреждение при чтении я предлагаю изменить логику записи следующим образом:

  1. Создать новый файл паркета во временном каталоге, который не виден читателям
  2. Запишите данные, которые вы намеревались записать, и закройте файл
  3. Переместите файл в правильное место, где читатель сможет найти его

Таким образом, читатель будет наблюдать только правильно закрытые файлы. Сломанные файлы останутся во временном каталоге.

0 голосов
/ 25 мая 2019

Я нашел способ проверить поврежденные файлы. Я копирую функции readFooter () из ParquetFileReader.java в свой проект и использую итератор, чтобы получить все файлы паркета и применить к ним readFooter (). Наконец сохраните поврежденный файл в массив и переместите его в другой каталог.

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