我正在使用0减少方法来解决我的问题。我希望对一个文件中的数据进行预处理,然后将其作为另一个文件写入,但没有新行和制表符?我怎样才能输出我的Map作业,它已经处理了我的数据,它以相同的文件格式来减去预处理。也就是说,我有这样的东西:
预处理:
<TITLE> Herp derp </Title> I am a major general
后处理:
Herp
Derp
I
am
a
major
general
我要它做的是:
Herp Derp I am a major general
我认为问题在于这一行代码:
job.setOutputFormatClass(TextOutputFormat.class);
然而,当我尝试时,很天真地做了这样的事情:
job.setOutputFormatClass(null);
这显然行不通。是否提供了一个格式类,我可以使用它来执行此操作?如果没有,我怎么能编写自己的类来输出我想要的一切呢?我是hadoop和map reduce的新手。
我已经包括我的Map功能如下。我不想使用reduce,因为它会在map和reducer之间排序。
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
//Did preprocessing here, irrelevant to my problem
context.write(word, null);
}
}
另外,我也在google上搜索了这个,并阅读了apachehadoopapi,看看是否能找到答案。
2条答案
按热度按时间vvppvyoh1#
在mapper类中,不要将行解析为单个单词并写出它们,而是尝试将整行发送到
这样一来,它就可以将原来使用的整个字符串保持在一起,而不是一段一段地发送行。
因此,为了预处理工作,请将字符串切分,然后在使用context.write命令发送时将其重新组合起来。
kpbwa7wx2#
如果您的Map器正在从一个输入行写入包含单个标记的多个记录,那么您绝对需要一个reducer将这些标记重新组合到一个行中进行输出。没有减速器你做不到。