0

その列 A と列 B にサンプルの CDR データを含むテーブルがあり、発信者と着信者の携帯電話番号があり、誰が最大通話数を持っているか (列 A) を見つける必要があり、また、どの番号 (列 B) を見つける必要があります。 ) 最も多く呼び出された

テーブル構造は以下のようなものです

呼ばれる

  • 889578226 77382596
  • 889582256 77382596
  • 889582256 7736368296
  • 7785978214 782987522

上記の表では、889578226 が最も発信コール数が多く、77382596 が最も多くコールされた番号であるため、出力を取得する必要があります。

ハイブで私は以下のように実行します

SELECT calling_a,called_b, COUNT(called_b) FROM cdr_data GROUP BY calling_a,called_b;

豚の上記のクエリと同等のコードは何ですか?

4

1 に答える 1

0

アナス、これがあなたが期待していることなのか、それとも何か違うのか教えてください。

input.txt
a,100
a,101
a,101
a,101
a,103
b,200
b,201
b,201
c,300
c,300
c,301
d,400

PigScript:
A = LOAD 'input.txt' USINg PigStorage(',') AS (name:chararray,phone:long);
B = GROUP A BY (name,phone);
C = FOREACH B GENERATE FLATTEN(group),COUNT(A) AS cnt;
D = GROUP C BY $0;
E = FOREACH D {
                SortedList = ORDER C BY cnt DESC;
                top = LIMIT SortedList 1;
                GENERATE FLATTEN(top);
              }
DUMP E;

Output:
(a,101,3)
(b,201,2)
(c,300,2)
(d,400,1)
于 2014-10-17T13:58:47.403 に答える