java map reduce从不同格式读取-avro,textfile

k5hmc34c  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(366)

我有几个配置单元表,其中一些是avro格式的,一些是纯文本文件格式的。模式略有不同,但都包含我需要的某些属性。
我计划写一个Map减少作业过程中的数据。问题是,我正在努力避免大量的单独工作,并尽可能简化流程。但愿我只需要写一份工作。
有没有任何例子显示如何读取不同格式的输入在一个Map器。
比如说,我在avro中有一个hdfs路径,我还有另一个hdfs路径,其中的数据是纯文本文件。

// Pseudo code
mapper (Paths){
    for(Path in Paths){
        if Path.containsAvro() {
            ... read as avro
        } else {
            ... read as textfile
        }
        ..
    }
}
gudnpqoy

gudnpqoy1#

为同一作业使用两个不同的Map器,每种格式一个。Map器可以各自读取自己的数据格式,但必须都写入相同的数据格式。使用这样的方法来配置:

MultipleInputs.addInputPath(job, new Path(path_to_data_with_format_1), SomeInputFormat.class, ReadFormatOneMapper.class);
MultipleInputs.addInputPath(job, new Path(path_to_data_with_format_2), SomeOtherInputFormat.class, ReadFormatTwoMapper.class);

当然,someinputformat和someotherinputformat不是真正的输入格式类。在本例中,两个Map器类将输出具有相同kay/值类型的键/值对,如果您有一个reducer,则将从两个Map器获取数据。

相关问题