这是我读取包含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);
我想在地图功能中完成这项工作?显然我需要阻止 InputFormat 中的拆分将整个文件作为单个值读取一次并将其更改为String(文件大小为7KB),因为您知道Hapi只能解析整个消息。
我是所有这些的新手所以请耐心等待。
答案 0 :(得分:0)
您需要实现自己的FileInputFormat子类:
isSplittable()
方法到false
,这意味着映射器的数量将等于输入文件的数量:每个映射器一个输入文件。 getRecordReader()
方法。这正是您需要从上面解析逻辑的类。 答案 1 :(得分:0)
当输入来自文本文件时,您可以覆盖fileInputFormat的isSplitable()方法。使用它,一个映射器将处理整个文件。
public boolean isSplitable(Context context,Path args[0])
{
return false;
}
答案 2 :(得分:0)
如果您不希望拆分数据文件,或者想要一个处理整个文件的映射器。这样一个文件只能由一个映射器处理。在这种情况下,扩展map / reduce inputformat并覆盖isSplitable()方法并返回“false”,因为boolean会帮助你。
对于ref :(不基于您的代码) https://gist.github.com/sritchie/808035