hadoop textinputformat每个文件只读取一行

rjee0c15  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(404)

我为hadoop0.20.2编写了一个简单的map任务,输入数据集由44个文件组成,每个文件大约3-5mb。任何文件的每一行都有其格式 int,int . 默认为输入格式 TextInputFormat Map器的工作是解析输入 Text 变成整数。
任务运行后,hadoop框架的统计显示map任务的输入记录数只有44条。我试着调试,发现方法的输入记录 map 只是每个文件的第一行。
有人知道问题是什么吗?我在哪里能找到解决办法?
提前谢谢你。
编辑1
输入数据由不同的map reduce任务生成,其输出格式为 TextOutputFormat<NullWritable, IntXInt> . 这个 toString() 方法 IntXInt 应该给出一系列 int,int .
编辑2
我的Map器如下所示

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
我刚刚检查过,Map程序实际上只读取每个文件的一行,而不是整个文件作为一个整体 Text 价值观。

rseugnpd

rseugnpd1#

inputformat定义如何将数据从文件读取到Map器示例中。默认的textinputformat读取文本文件的行。它为每条记录发出的键是读取的行的字节偏移量(作为可长写的),值是行的内容,直到终止的'\n'字符(作为文本对象)。如果有多行记录,每条记录之间用$字符分隔,您应该编写自己的inputformat,将文件解析为按此字符拆分的记录。

lf3rwulv

lf3rwulv2#

我怀疑你的Map器会把所有文本作为输入并打印输出。你能给我看一下你的Map器类和Map器函数的定义吗?即

static class MyMapper extends Mapper <LongWritable,Text,Text,Text>{ 
    public void map (LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //do your mapping here

    }
}

我想知道这一行是否有不同之处

相关问题