java - MapReduce:如何在没有换行符的情况下输出键/值对?

标签 java hadoop map mapreduce reduce

我正在使用 0 reduce 方法来解决我的问题。我希望预处理一个文件中的数据,然后将其作为另一个文件写出,但没有换行符和制表符分隔符?我如何输出我的 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);
            }
        }

此外,我还用谷歌搜索并阅读了 apache hadoop api 以查看是否可以找到答案。

最佳答案

在您的映射器类中,不要将您的行解析为单独的单词并写出,而是尝试将整行发送到

context.write(word, null);

这样可以将您最初使用的整个字符串保持在一起,而不是逐行发送。

因此,将您的字符串分开以进行预处理工作,然后在使用 context.write 命令将其发送出去时将其放回原处。

关于java - MapReduce:如何在没有换行符的情况下输出键/值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070640/

相关文章:

jdbc - 找不到sqoop + cloudera manager jdbc驱动程序

logging - hadoop 2.2.0事件namenode会删除编辑日志吗?

java - TreeMap、HashMap 和 LinkedHashMap 的性能?

c++ - 在字典中查找单词模式,高性能

java - 在 Play Framework 中插入批量数据的最佳方式是什么?

java - 平面设计 Java Swing 外观和感觉

java - 如何在 RxJava 中进行递归 Observable 调用?

java - mapred.Mapper 与 mapreduce.Mapper

java - Eclipse 插件为源文件的内聚部分定义不同的背景颜色?

python - 在进程之间共享一个变量