java - hadoop textinputformat 每个文件只读一行

标签 java hadoop mapreduce word-count

我为hadoop 0.20.2写了一个简单的map任务,输入数据集由44个文件组成,每个大约3-5MB。任何文件的每一行都具有 int,int 格式.输入格式默认为TextInputFormat映射器的工作是解析输入 Text转化为整数。

任务运行后,hadoop框架的统计显示map任务的输入记录数只有44条,调试了一下发现方法map的输入记录数只是每个文件的第一行。

有人知道问题出在哪里吗?我在哪里可以找到解决方案?

先谢谢你。

编辑 1

输入数据是由不同的 map-reduce 任务生成的,其输出格式为 TextOutputFormat<NullWritable, IntXInt> . toString() IntXInt的方法|应该给出一串 int,int .

编辑2

我的映射器如下所示

static class MyMapper extends MapReduceBas
  implements Mapper<LongWritable, Text, IntWritable, IntWritable> {

  public void map(LongWritable key,
                  Text value,
                  OutputCollector<IntWritable, IntWritable> output,
                  Reporter reporter) {

    String[] s = value.toString().split(",");
    IntXInt x = new IntXInt(s[0], s[1]);
    output.collect(x.firstInt(), x.secondInt());
  }
}

编辑3

我刚刚检查过,映射器实际上只为每个文件读取 1 行,而不是整个文件作为一个 Text值(value)。

最佳答案

InputFormat 定义了如何将文件中的数据读取到 Mapper 实例中。默认的 TextInputFormat 读取文本文件的行。它为每条记录发出的键是读取行的字节偏移量(作为 LongWritable),值是行的内容,直到终止字符“\n”(作为文本对象)。如果你有多个-line 记录,每个记录由 $ 字符分隔,您应该编写自己的 InputFormat,将文件解析为按此字符分割的记录。

关于java - hadoop textinputformat 每个文件只读一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662579/

相关文章:

hadoop - hive :提取数据时出错

hadoop - 无法在Windows 10计算机上使用.vmdk运行cloudera VM

mongodb - 查找集合中字段(如果存在)的总和

java - 我应该能够将 yaml 与 spring ConfigurationProperties 一起使用吗?

java - 运行 Java 小程序时出现问题

java - If,Else,setText麻烦

java - 使用谷歌播放服务时出现安卓磨损错误

hadoop - ORC/Parquet 文件格式的大型 Hive 表中的列具有相同值的影响

Java 字符串的正则表达式

hadoop - 运行MR作业时如何忽略MapFiles的索引文件?