如何处理文件中的头和尾?在处理完这些行之后,应该将其从文件中删除。
Header行可以通过偏移量值0和相同的尾部最大偏移量找到。但这里的问题是我们如何在一个映射器中得到这两条线?
感谢你的帮助。
问候,Mohammed Niaz
当给定的输入文件只有一个映射器时,这是可能的
我们可以在以下三个选项中处理Header和Trailer记录
- 编写一个自定义的InputFormat文件并扩展FileInputFormat。在自定义InputFormat中,重写isSplitable()方法并返回'false',这样MR框架就不会拆分文件内容并将整个内容传递给一个映射器类。
- 使hdfs块大小大于文件大小(但不推荐)。因此,整个文件内容将可用于一个映射器类。
- 如果输入文件被压缩(如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());
}
}