首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hadoop textinputformat每文件只读取一行

hadoop textinputformat每文件只读取一行
EN

Stack Overflow用户
提问于 2013-05-21 05:15:50
回答 2查看 3K关注 0票数 1

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

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

有没有人知道问题是什么,我在哪里能找到解决办法?

谢谢你的进阶。

编辑1

输入数据是由一个不同的map-还原任务生成的,其输出格式是TextOutputFormat<NullWritable, IntXInt>toString()方法IntXInt应该给出一个int,int字符串。

编辑2

我的映射器如下所示

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

发布于 2013-05-21 07:11:18

InputFormat定义了如何将数据从文件读入Mapper instances.The默认的TextInputFormat读取文本文件行。它为每条记录发出的键是行读取的字节偏移量(作为LongWritable),值是行的内容,直到终止的'\n‘字符(作为文本对象).If(作为文本对象)--每个多行记录都由$字符分隔,您应该编写自己的InputFormat,将文件解析为在该字符上拆分的记录。

票数 0
EN

Stack Overflow用户

发布于 2013-05-21 08:18:41

我怀疑您的映射器会将所有文本作为输入并打印输出。你能出示你的Mapper类解密和映射函数解密吗?i.e

代码语言:javascript
复制
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

    }
}

我想知道这句话有什么不同吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16662579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档