Java MapReduce作业计算百分比

时间:2012-08-03 02:52:02

标签: java hadoop mapreduce hive

下面是我的表(MyTable)

ID          TotalCount   ErrorCount   DT
----------------------------------------------
1345653         5           3       20120709
534140349       5           2       20120709
601806615       5           1       20120709
682527813       4           3       20120709
687612723       3           2       20120709
704318001       5           4       20120709
1345653         5           2       20120710
704318001       1           0       20120710
1120784094      3           2       20120711

因此,如果我需要使用HiveQL计算特定日期的Hive中的错误百分比,那么我将这样做 -

SELECT 100 * sum(ErrorCount*1.0) / sum(TotalCount) FROM MyTable 
where dt = '20120709'; 

但我需要使用Java MapReduce做同样的事情。我们有什么方法可以使用MapReduce in Java code做同样的事情。首先,每当我们用Java编写任何MapReduce作业时,我都会感到困惑,我们读取了该日期分区的相应文件?或者我们读了桌子?

更新: - 下面是将包含上述方案的表名

create table lipy
( buyer_id bigint,
  total_chkout bigint,
  total_errpds bigint
 )
 partitioned by (dt string)
row format delimited fields terminated by '\t'
stored as sequencefile
location '/apps/hdmi-technology/lipy'
;

2 个答案:

答案 0 :(得分:1)

这很简单 - 让我试一下伪代码。

SELECT 100 * sum(ErrorCount*1.0) / sum(TotalCount) FROM MyTable 
where dt = '20120709'; 

地图阶段:

  • 为总计数增加一个计数器(您可以简单地使用一个字段)
  • 检查dt列是否等于20120709
  • 如果是,则递增错误计数器
  • 清理中的
  • 以“Key/Value-1 / totalcount0 / error counter
  • 的形式发出

减少阶段:  (您获得密钥-1的总计数,错误计数器为密钥0)

  • 添加键-1和键0
  • 中的所有数字
  • 在清理中,您可以计算您的百分比,如果可能,也可以发送邮件

有几点需要注意:

  • 如果计数不符合整数,则Mapoutput为<IntWritable, IntWritable><IntWritable,LongWritable>
  • 将reducer的数量设置为1,因此单个reducer将获取所有键。

我相信这是需要注意的一切,这里很早就没有咖啡,所以如果你发现问题,请随时告诉我;)

答案 1 :(得分:0)

您可以这样做,但实施将取决于:

  1. 您的桌子是否外部 关于地点:
  2. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintofilesystemfromqueries

    1. 如何格式化数据 - 行格式,分隔符,...
      http://hive.apache.org/docs/r0.9.0/language_manual/data-manipulation-statements.html

    2. 您希望如何执行MapReduce。一个非常直接的选择是运行你的 Java MapReduce代码作为重用HiveQL函数的用户定义函数(UDF):

    3. https://cwiki.apache.org/Hive/tutorial.html#Tutorial-Custommap%252Freducescripts

      或者只是在HDFS中对Hive表数据运行自定义mapreduce。