0

下面是我的表(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'
;
4

2 回答 2

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 获取所有键。

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

于 2012-08-03T05:48:04.543 回答
0

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

  1. 您的表是外部的吗?关于位置:

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) 运行:

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

或者简单地在 HDFS 中的 Hive 表数据上运行您的自定义 mapreduce。

于 2012-08-03T03:30:01.150 回答