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 / totalcountおよび0 / error counter

段階を減らします: (キー -1 の totalcount とキー 0 としてエラー カウンターを取得します)

  • キー -1 とキー 0 からのすべての数字を追加します
  • クリーンアップでは、パーセンテージを計算でき、可能であればメールを送信できます

注意すべき点がいくつかあります。

  • Mapoutput は<IntWritable, IntWritable>、または<IntWritable,LongWritable>カウントが整数に収まらない場合です。
  • レデューサーの数を 1 に設定して、1 つのレデューサーがすべてのキーを取得するようにします。

ここで注意すべきことはこれですべてだと思います。ここではかなり早い時間で、コーヒーがありませんでした。問題を見つけたら、遠慮なく教えてください ;)

于 2012-08-03T05:48:04.543 に答える
0

これを行うことができますが、実装は次のものに依存します。

  1. あなたのテーブルは外部ですか? 場所について:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintofilesystemfromqueries

  1. データはどのようにフォーマットされていますか - 行フォーマット、区切り記号など
    ...

  2. MapReduce をどのように実行しますか。非常に簡単なオプションの 1 つは、HiveQL 関数を再利用するユーザー定義関数 (UDF) として Java MapReduce コードを実行することです。

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

または、HDFS の Hive テーブル データに対してカスタム mapreduce を実行するだけです。

于 2012-08-03T03:30:01.150 に答える