这是我读取包含 Hl7 消息的文件并使用快乐迭代器(从 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),因为如您所知,快乐只能解析整个消息。
我是这一切的新手,所以请耐心等待。
你需要实现你自己的FileInputFormat子类:
- 它必须重写
isSplittable()
方法才能false
这意味着映射器的数量将等于输入文件的数量:每个映射器一个输入文件。 - 您还需要实现
getRecordReader()
方法。这正是您需要从上面解析逻辑的类。
如果您不希望拆分数据文件,或者想要一个映射器来处理整个文件。这样,一个文件将仅由一个映射器处理。在这种情况下,扩展map/reduce输入格式并覆盖isSplitable()方法并返回"false"作为布尔值将对您有所帮助。
对于 ref : ( 不基于您的代码 )https://gist.github.com/sritchie/808035
当输入是从文本文件中获取的,你可以覆盖 fileInputFormat 的 isSplitable() 方法。使用此功能,一个映射器将处理整个文件。
public boolean isSplitable(Context context,Path args[0])
{
return false;
}