2016-11-17 3 views
1

私は何百ものグループが生成されているので、それらを調べることを避けようとしています。このために、私はそれらを数え、それらを注文してから上位5つの結果に限定します。豚でトップ5の結果の外に「その他」の数をつける

counts = foreach (group distinctVals by (description)) generate group, COUNT_STAR(distinctVals) as count; 
ordered = order counts by count desc; 
limited = limit ordered 5; 
dump limited; 

しかし、私は「5トップ」と単に他と呼ばれるグループとしてビンにそれらをしなかったどのように多くの結果の別の数を持っていると思います。

だから私の出力は

(John ,38436) 
(Steve ,13654) 
(Sarah ,9334) 
(Rick ,3241) 
(Morty ,784) 
(Other ,3421) 

答えて

0

使用RANKようなものになるだろう。データを注文した後、RANKを使用して順序付き関係のランクを生成します。これにより、最初の列として新しいrank_ordered列が追加されます。次に、ランク列をFILTERという2つの関係のデータセットに使用できます。他の関係、GROUP ALLSUM第3列すなわち$ 2またはcount列。最後に、UNIONとother_sum。

counts = foreach (group distinctVals by (description)) generate group, COUNT_STAR(distinctVals) as count; 
ordered = order counts by count desc; 
ordered1 = rank ordered; 

limited = FILTER ordered1 BY rank_ordered <= 5; 
other = FILTER ordered1 BY rank_ordered > 5; 

other_grp = GROUP other ALL; 
other_sum = FOREACH other_grp GENERATE SUM(other.$2); 

final = UNION limited,other_sum; 
+0

ありがとうございます!病気はそれを行ってください。 – Pxl

関連する問題