2

次のデータセットがある場合:

c1   c2
---  ---
1    5
1    5
1    6
2    9
2    9
3    1
3    2

最初の列(c1)の値ごとに、2番目の列(c2)で最も頻繁に発生する値を返したい。したがって、c1 = 1の場合は値「5」が2回発生し、値「6」は1回だけ発生し、c1 = 2の場合は「9」の値が2回発生し、他の値が発生します:

1    5
2    9
3    1

私が問題を抱えているのは、同じ数の発生がある場合(この場合はc1 = 3)です。c2に同じ数の発生値がある場合(c1 = 3)は、最初のオカレンスが返されました。

どんなアイデアも役に立ちます。

4

2 に答える 2

2

A に c1 と c2 があると仮定します。

B = GROUP A BY (c1, c2)
C = FOREACH B GENERATE GROUP, COUNT(A) as num;

D = GROUP C BY GROUP.c1
E = FOREACH D {
    SA = ORDER C BY num DESC;
    SB = LIMIT SA 1;
    GENERATE FLATTEN(SB.group);
}

あなたの問題を解決するはずです。(私はメモ帳に書きましたが、describe/illustrate でフラット化が必要かどうかを確認する必要があります)

于 2012-05-08T12:44:56.537 に答える