Расшифровка файла Hadoop Snappy

Поэтому у меня возникли проблемы с расшифровкой файла snappy из HDFS. Если я использую hadoop fs -text Я могу распаковать и вывести файл просто файл. Однако, если я использую hadoop fs -copyToLocal и попробуйте распаковать файл с python-snappy, я получаю

snappy.UncompressError: Ошибка при распаковке: неверный ввод

Моя программа на Python очень проста и выглядит так:

import snappy

with open (snappy_file, "r") as input_file:
    data = input_file.read()
    uncompressed = snappy.uncompress(data)
    print uncompressed

Это с треском проваливается для меня. Поэтому я попробовал другой текст, я взял вывод из hadoop fs -text и сжал его, используя библиотеку python-snappy. Затем я вывел это в файл. После этого я смог прочитать этот файл и распаковать его.

AFAIK snappy обратно совместим между версиями. Мой код на Python использует последнюю версию snappy, и я предполагаю, что hadoop использует более старую версию snappy. Может ли это быть проблемой? Или я что-то здесь упускаю?

1 ответ

Решение

Хорошо, я понял это. Оказывается, что я использовал распаковку в режиме raw для файла, сжатого с использованием формата кадрирования hadoop. Даже когда я попробовал StreamDecompressor в 0.5.1, он все равно не удался из-за ошибки кадрирования. python-snappy 0.5.1 по умолчанию использует новый формат кадров snappy и, следовательно, не может распаковать snappy-файлы hadoop.

Оказывается, что в основной версии 0.5.2 добавлена ​​поддержка формата кадрирования hadoop. После того как я собрал и импортировал его, я смог легко распаковать файл:

with open (snappy_file, "r") as input_file:
  data = input_file.read()
  decompressor = snappy.hadoop_snappy.StreamDecompressor()
  uncompressed = decompressor.decompress(data)

Теперь единственная проблема заключается в том, что технически это еще не версия в пипсах, поэтому я думаю, мне придется подождать или просто использовать сборку из исходного кода.

Другие вопросы по тегам