Как прочитать файл последовательности Hadoop с использованием Java

У меня есть файл последовательности, сгенерированный Spark с помощью функции saveAsObjectFile. Содержимое файла - это просто некоторые целые числа. И я хочу прочитать это локально с Java. Вот мой код:

    FileSystem fileSystem = null;
    SequenceFile.Reader in = null;
    try {
        fileSystem = FileSystem.get(conf);
        Path path = new Path("D:\\spark_sequence_file");
        in = new SequenceFile.Reader(conf, SequenceFile.Reader.file(path));
        Writable key = (Writable)
                ReflectionUtils.newInstance(in.getKeyClass(), conf);
        BytesWritable value = new BytesWritable();
        while (in.next(key, value)) {
            byte[] val_byte = value.getBytes();
            int val = ByteBuffer.wrap(val_byte, 0, 4).getInt();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

Но я не могу прочитать это правильно; Я просто получаю все одинаковые значения, и, очевидно, они ошибаются. Вот мой снимок ответа

введите описание изображения здесь

Заголовок файла выглядит так: введите описание изображения здесь

Кто-нибудь может мне помочь?

1 ответ

В Hadoop ключи обычно имеют тип WritableComparable, а значения имеют тип Writable. Имея в виду эту основную концепцию, я прочитал файл последовательности следующим образом.

Configuration config = new Configuration();
Path path = new Path(PATH_TO_YOUR_FILE);
SequenceFile.Reader reader = new SequenceFile.Reader(FileSystem.get(config), path, config);
WritableComparable key = (WritableComparable) reader.getKeyClass().newInstance();
Writable value = (Writable) reader.getValueClass().newInstance();
while (reader.next(key, value))
  // do some thing
reader.close();

Проблема с данными в вашем случае может быть вызвана тем, что вы используете saveAsObjectFile() вместо того, чтобы использовать saveAsSequenceFile(String path,scala.Option<Class<? extends org.apache.hadoop.io.compress.CompressionCodec>> codec)

Пожалуйста, попробуйте использовать вышеупомянутый метод и посмотрите, если проблема не устранена.

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