Как мне найти значение в Had oop SequenceFile? - PullRequest
1 голос
/ 14 июля 2020

Я записал некоторые данные двоичного изображения в Had oop SequenceFile и хотел бы записать его как PNG вне Had oop, если возможно, используя Java.

[Отредактировано ] Обзор потока данных: Входные файлы → Генерация BufferedImages из ввода → Преобразование BufferedImages в двоичные массивы → Сохранение как SequenceFile в HDFS → Попытка взять SequenceFile за пределы HDFS и преобразовать его в PNG.

Однако я Я не уверен, как определить, где данные начинаются в SequenceFile. Из того, что я видел в документации SequenceFile , я могу использовать маркер syn c, чтобы найти конец заголовка SequenceFile, а затем использовать информацию о длине записи и длине ключа, чтобы найти начало value.

Однако я не уверен, как найти маркер syn c. Как мне найти, где заканчиваются метаданные заголовка и где начинается и заканчивается маркер syn c? Могу ли я рассчитать значение маркера syn c и найти его таким образом? Кроме того, как я могу узнать количество байтов, которое занимает длина записи и длина ключа?

Если есть альтернативные способы найти значение SequenceFile, дайте мне знать. Если это помогает, вот небольшой фрагмент кода, который я использовал для записи в SequenceFile.

baos = new ByteArrayOutputStream(); 
ImageIO.write(img, "png", baos); //img is a BufferedImage
byte[] imBytes = baos.toByteArray();
baos.write(imBytes);
writer = SequenceFile.createWriter(conf, writer.file(new Path(imgPath)), writer.keyClass(Text.class),writer.valueClass(BytesWritable.class));
writer.append(new Text(imgPath), new BytesWritable(imBytes));

По сути, я взял BufferedImage, сгенерированный программой, записал его в массив байтов как PNG, затем записал его в SequenceFile.

[Edit] Я просмотрел исходный код SequenceFile , и там есть функция getSync()? Я думаю, что это личное, поэтому не знаю, как бы я его использовал.

...