在我的一个mapreduce任务中,我将byteswritable重写为keybyteswritable,并将bytewritable重写为valuebyteswritable。然后我使用sequencefileoutputformat输出结果。
我的问题是,当我开始下一个mapreduce任务时,我想将这个sequencefile用作inputfile。那么,如何设置jobclass,以及mapper类如何识别我之前重写的sequencefile中的键和值呢?
我知道我可以sequencefile.reader来读取键和值。
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))
但我不知道如何使用这个读取器将键和值作为参数传递到mapper类中。如何将conf.setinputformat设置为sequencefileinputformat,然后让mapper获取键和值?
谢谢
1条答案
按热度按时间6tdlim6h1#
您不需要手动读取序列文件。只需将输入格式类设置为序列文件:
并将输入路径设置为包含序列文件的目录。
您需要注意Map器类的参数化类型上输入的(key,value)类型,以匹配序列文件中的(key,value)元组。