Как определить, присутствуют ли контрольные суммы в файле Parquet?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как определить, присутствуют ли контрольные суммы в файле Parquet?

Сообщение Anonymous »

Недавно я наткнулся на ошибку при чтении таблицы паркета в Pyspark: < /p>

Код: Выделить всё

Caused by: org.apache.parquet.io.ParquetDecodingException: could not verify page integrity, CRC checksum verification failed
< /code>
Эта таблица была передана по FTP. Ошибка была разрешена, когда я удалил таблицу в пункте назначения и снова передал ее из источника. Следовательно, один, если не больше паркетных файлов, должен был быть поврежден при передаче по сети во время первой попытки. к повреждению данных в транзите. Я хочу осмотреть другие таблицы, которые были перенесены с использованием этой же общей работы. Тем не менее, я подозреваю, что базовые паркетные файлы большинства этих таблиц не содержат контрольной суммы. В противном случае вероятность того, что моя команда сталкивалась с этой ошибкой раньше. Если в файле присутствует контрольная сумма, она будет целым числом и в противном случае NA 
Есть ли в Python, чтобы прочитать CRC страницы парке. Если кто -то присутствует косвенно? Вопрос и ответ на Stackoverflow ниже, по -видимому, предполагает, что это нельзя сделать в Pyarrow , к сожалению. >

Обновление 2025-01-30 < /strong> < /p>
Я не обнаружил решение в Python после дальнейшего копание. Python Packages Parquet-Tools и Parquet-Cli недостаточно детализируются. Тем не менее, Java-версия Parquet-Tools подходит. Самый простой способ, которым я смог получить работу Java,-это использовать версию Docker: https://github.com/rm3l/docker-parquet-tools
$docker container run -v ./local/path/to/parquet:/container/path/to/parquet --rm -t rm3l/parquet-tools:latest dump -n /container/path/to/parquet/test.parquet
< /code>
Я запустил два эксперимента ниже, чтобы определить, могу ли я надежно обнаружить поврежденные паркетные файлы. < /p>
test a: < /p>
data = [("John", 28), ("Anna", 23), ("Mike", 35), ("Sara", 30), ("David", 40)]
columns = ["Name", "Age"]
df = spark.createDataFrame(data, columns)
df.repartition(1).write.option("parquet.page.write-checksum.enabled", "true").parquet(...)
< /code>
Затем с использованием вывода Parquet-Tools, включающих в себя строку ниже: < /p>

Страница 0: dle: rle rle: bit_packed VLE: Plain ST: [Нет статистики для этого
column] crc: [страница corpt] < /strong> sz: 47 Vc: 5 < /p>
< /blockquote>
тест b: < /p>
data = [("John", 28), ("Anna", 23), ("Mike", 35), ("Sara", 30), ("David", 40)]
columns = ["Name", "Age"]
df = spark.createDataFrame(data, columns)
df.repartition(1).write.option("parquet.page.write-checksum.enabled", "false").parquet(...)
< /code>
Затем с использованием вывода Parquet-Tools, включающих в себя строку ниже: < /p>

Страница 0: dle: rle rle: bit_packed VLE: Plain ST: [Нет статистики для этого
column] crc: [none] < /strong> sz: 47 vc: 5 < /p>
< /blockquote>
Результаты теста a очень неожиданные, потому что он не должен был привести к повреждению файла, и все же я читаю CRC: [страница corrupt], ​​а не ожидаемое целочисленное значение.

Подробнее здесь: https://stackoverflow.com/questions/793 ... rquet-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»