如何使映射器处理来自 HDFS 的整个文件



这是我读取包含 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子类:

  1. 它必须重写isSplittable()方法才能false这意味着映射器的数量将等于输入文件的数量:每个映射器一个输入文件。
  2. 您还需要实现getRecordReader()方法。这正是您需要从上面解析逻辑的类。

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

对于 ref : ( 不基于您的代码 )https://gist.github.com/sritchie/808035

当输入是从文本文件中获取的,你可以覆盖 fileInputFormat 的 isSplitable() 方法。使用此功能,一个映射器将处理整个文件。

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

相关内容

  • 没有找到相关文章

最新更新