在hadoop结果中显示聚合键和值

voase2hg  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(322)

我对hadoop非常陌生,我编写了一个mapreduce程序,它解析输入文件并提取一个特定的模式作为键及其值。我可以很容易地减少它和最终的输出是一个文件与对键和值。

public class EReducer extends MapReduceBase implements Reducer<Text, Text, Text, Text>     
{

    private Text outputKey1 = new Text();
    private Text outputValue1 = new Text();

    public void reduce(Text equipKey1, Iterator<Text> equipValues1,
                    OutputCollector<Text, Text> results1, Reporter reporter1) throws IOException {
            String output1 = "";
  while(equipValues1.hasNext())
            {
                    Text equi= equipValues1.next();
                    output1 = output1 + equi.toString();
            }

                    outputKey1.set(equipKey1.toString());
                    outputValue1.set(output1);
                    results1.collect(outputKey1, outputValue1);
}

问题是,在文件的开头,我需要显示一个特定键的键总数和值总数作为一个集合。
关键字:日期
价值:发生的事情。
像这样的

12/03/2013 CMB ate pizza
           He went to a mall
           He met his friend

2013年3月12日,一共发生了3件事。好像会有一系列的日期和事件。
最后我要说的是,在日期“date”上有“this number of action”。2013年3月12日有3起诉讼。。。。
我怎样才能做到这一点?任何帮助都将不胜感激。!

cbjzeqam

cbjzeqam1#

不确定这是否是直接的答案,但我不会将聚合与输出一起存储。考虑清管器获取骨料。它非常适合这个用例。
另外,我不明白“文件开始”的问题。一个reducer任务可以使用多个键值,因此您的文件“part-r-00000”需要

12/01/2012 something something1 something2 
12/02/2012 abc abc1 abc2

但我倾向于只存储从reducer发出的数据,而不进行聚合,并使用pig运行它们来获得所需的计数(您必须实现udf来解析事件,这非常简单)
只是一个可能的片段

a = LOAD '/path/to/mroutput' as (dt:chararray, evdata:chararray);
b = foreach a generate dt, com.something.EVParser(evdata) as numberofevents;
c = store b into '/path/to/aggregateddata';

相关问题