如何在MapReduce中处理Header和Trailer



如何处理文件中的头和尾?在处理完这些行之后,应该将其从文件中删除。

Header行可以通过偏移量值0和相同的尾部最大偏移量找到。但这里的问题是我们如何在一个映射器中得到这两条线?

感谢你的帮助。

问候,Mohammed Niaz

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

我们可以在以下三个选项中处理Header和Trailer记录

    编写一个自定义的InputFormat文件并扩展FileInputFormat。在自定义InputFormat中,重写isSplitable()方法并返回'false',这样MR框架就不会拆分文件内容并将整个内容传递给一个映射器类。
  1. 使hdfs块大小大于文件大小(但不推荐)。因此,整个文件内容将可用于一个映射器类。
  2. 如果输入文件被压缩(如gzip),整个文件内容将可用于一个映射器。e压缩)。

欢迎大家提出意见和建议。

虽然MapReduce作业中的TextInputFormat类(以及其他类,但我没有完整的列表)不能给您正在处理的记录的行号,但它可以通过Key给您字节偏移量。显然,它是用来生成唯一密钥的。下面的代码删除输入的第一条记录(也就是头记录)…

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

相关内容

  • 没有找到相关文章

最新更新