在这段代码中,我读取了包含hl7消息的文件,并使用hapi iterator(从http://hl7api.sourceforge.net)
File file = new File("/home/training/Documents/msgs.txt");
InputStream is = new FileInputStream(file);
is = new BufferedInputStream(is);
Hl7InputStreamMessageStringIterator iter = new
Hl7InputStreamMessageStringIterator(is);
我想在map函数中实现这一点?显然,我需要防止inputformat中的拆分,将整个文件作为单个值读取一次,然后将其更改为string(文件大小为7kb),因为您知道hapi只能解析整个消息。
我对这一切都是新手,所以请容忍我。
3条答案
按热度按时间uxh89sit1#
如果不希望分割数据文件,或者希望使用一个Map器来处理整个文件。这样一个文件将只由一个Map器处理。在这种情况下,扩展map/reduce inputformat并重写issplitable()方法并以布尔形式返回“false”将对您有所帮助。
参考:(不基于您的代码)https://gist.github.com/sritchie/808035
aydmsdu92#
由于输入来自文本文件,因此可以重写fileinputformat的issplitable()方法。使用此方法,一个Map器将处理整个文件。
public boolean isSplitable(Context context,Path args[0]) { return false; }
ozxc1zmp3#
您需要实现自己的fileinputformat子类:
它必须覆盖
isSplittable()
方法false
这意味着Map器的数量将等于输入文件的数量:每个Map器一个输入文件。你还需要实施
getRecordReader()
方法。这正是您需要将解析逻辑从上面放到下面的类。