1

这是我读取包含 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中的拆分以将整个文件作为单个值读取一次并将其更改为字符串(文件大小为 7KB),因为如您所知,Hapi 只能解析整个消息。

我是这一切的新手,所以请多多包涵。

4

3 回答 3

1

您将需要实现自己的FileInputFormat子类:

  1. 它必须覆盖isSplittable()方法,false这意味着映射器的数量将等于输入文件的数量:每个映射器一个输入文件。
  2. 您还需要实现getRecordReader()方法。这正是您需要从上面解析逻辑的类。
于 2016-04-24T18:16:51.020 回答
1

如果您不想拆分数据文件,或者您想要一个处理整个文件的映射器。这样一个文件将仅由一个映射器处理。在这种情况下,扩展 map/reduce inputformat 并覆盖 isSplitable() 方法并将“false”作为布尔值返回会对您有所帮助。

供参考:(不基于您的代码) https://gist.github.com/sritchie/808035

于 2016-04-26T08:54:17.340 回答
0

由于输入来自文本文件,您可以覆盖 fileInputFormat 的 isSplitable() 方法。使用它,一个映射器将处理整个文件。

public boolean isSplitable(Context context,Path args[0]) { return false; }

于 2016-04-25T10:49:11.207 回答