如何在MapReduce中处理Header和Trailer

时间:2014-08-10 06:07:30

标签: mapreduce hdfs

如何处理文件中的标题和预告片? 处理完这些行后,应将其从文件中删除。

标题行可以通过偏移值0和相同的预告片找到最大偏移量。 但问题是我们如何在一个映射器中获得这两行?

感谢您的帮助..

关心,穆罕默德·尼亚兹

2 个答案:

答案 0 :(得分:0)

当我们只有一个给定输入文件的映射器时,它是可能的。

我们可以在以下三个选项中处理标题和预告片记录

  1. 编写自定义的InputFormat文件并扩展FileInputFormat。在自定义InputFormat覆盖isSplitable()方法并返回'false',因此MR框架不会拆分文件内容并将整个内容传递给一个映射器类。
  2. 使hdfs块大小大于文件大小(但不推荐)。因此整个文件内容可供一个映射器类使用。
  3. 如果输入文件是Gzip压缩(即压缩),则整个文件内容可供一个映射器使用。
  4. 欢迎任何意见或建议。

答案 1 :(得分:0)

虽然MapReduce作业中的TextInputFormat类(以及其他类,但我没有完整列表)无法提供您正在处理的记录的行号,但它可以通过以下方式为您提供字节偏移量钥匙。显然,它用于生成唯一键。 以下代码删除了第一个输入记录(也就是标题记录)......

 while (context.nextKeyValue()) {
        if (context.getCurrentKey().get() != 0L) {
            map(context.getCurrentKey(), context.getCurrentValue(), context);
        } else {
            System.out.println(" Skipping the header: " + context.getCurrentValue());
        }
    }