【问题标题】:How do I print intermediate data in hadoop map reduce programming framework如何在hadoop map reduce编程框架中打印中间数据
【发布时间】:2015-04-25 07:13:00
【问题描述】:

假设我们有一个文件包含 test::

hi how are you 
how is your  job 
how is your family
what is hadoop hi  

mapperclass 的期望输出:

hadoop[1]

hi[1,1]

how[1,1,1]

is[1,1,1]

your[1,1]

对于每个不同的字符串都是这样的......

【问题讨论】:

    标签: javascript hadoop collections mapreduce


    【解决方案1】:

    输入文件:: 德拉维德班格洛尔 萨钦孟买 多尼兰契 德拉维德斋浦尔 多尼金奈 新德里 甘比尔德里 甘比尔加尔各答 减速机输出:: Dravid Banglore,Jaipur Dhoni Ranchi,Chennai Gambhir Delhi,Calcutta Sachin Mumbai Sehwag Delhi

    这可以使用 Map Reduce 程序来实现。

    Mapper 类:玩家名称是键,地名是值。

    Reducer 类:当我们遍历键(玩家名称)时,我们会获得与其关联的所有值(地名)。我们可以只构造具有键(玩家名称)和逗号分隔值(地名)的字符串,然后从 reducer 输出。

    【讨论】:

    • public void reduce(Text key/*shiv*/, Iterator value/*[23,56,87,90,778]*/, OutputCollector output, Reporter r)抛出 IOException { { String s = ""; while(value.hasNext()) { LongWritable i = value.next(); s = s+i+","; } s=s.substring(0,s.length()-1); output.collect(key, new IntWritable(s));//error } } 你能纠正这个错误吗?
    • s = s+ i+"," ---> 这会给你这样的字符串 23,56,87,90,778。然后如果我们执行 new Intwritable(23,56,87,90,778) 它将抛出一个错误,即字符串无法转换为有效整数。你能告诉你的确切要求吗..
    【解决方案2】:

    如果您需要将映射器输出保存为文件,您可以简单地单独运行映射器作业。这可以通过删除 reducer 类或设置属性 job.setNumReduceTasks(0) 来完成。 如果您的要求是打印映射器输出,您只需执行 System.out.println(key,value)。

    如果您的要求是打印 reducer 输入,我的意思是键,list[values]。您可以在 reduce 方法中执行 System.out.println。

    为了打印所有中间值,您可以在Mapper类、Partitioner类和Reducer类中执行打印语句。

    【讨论】:

    • 我不想在屏幕上打印。我想通过使用 output.collect() 将这些数据写入 HDFS 输出文件 (part-00000);
    • 输入文件:: Dravid Banglore Sachin Mumbai Dhoni Ranchi Dravid Jaipur Dhoni Chennai Sehwag Delhi Gambhir Delhi Gambhir Calcutta 我期待:: Dravid Banglore,Jaipur Dhoni Ranchi,Chennai Gambhir Delhi,Calcutta Sachin Mumbai Sehwag Delhi 减速机输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多