2016-04-12 12 views
-2

私はgroupのデータを(GroupID、count)というフォーマットにしました。以下のように、GroupIDを保持しながら、カウントの差を計算したいと思います。私はSUBTRACT関数を使用しようとしましたが、現在のレコードから前のレコードを減算する方法がわかりません。これは、(1、288)(2、2)、(3,66) 2番目の画像はカウント部分を示しています。減算部分が失敗しました。グループ化後のカウントの違いを計算するにはどうすればよいですか?

enter image description hereenter image description here

答えて

1

これは達成するが、第2行ではなく2つの関係.Join ID 1、すなわち($ 0-1)とを生成始まるJOIN.Generate他の関係を使用して行うことができる少し厄介ですidを1にすると、元のidを取得します.Unionは、最初の行とその違いを含む行を追加します。

A = foreach win_grouped generate $0 as id,count($1) as c; -- (1,228),(2,230)... so on 
A1 = filter A by ($0 > 1);        -- (2,230),(3,296)... so on 
B = foreach A1 generate ($0 - 1) as id,$1 as c;   -- (1,230),(2,296)... so on 
AB = join A by id,B by id;        -- (1,228,1,230),(2,230,2,296)...so on 
C = foreach AB generate (A::id + 1),(B::c - A::c)   -- (2,2),(3,66)...so on 
D = limit A 1;           -- (1,288) 
E = UNION D,C;           -- (1,288),(2,2),(3,66)...so on 
DUMP E; 
+0

私は既にそれを試していますが、C = foreach AB generate(A. $ 0 + 1)、(B. $ 1 - A. $ 1); 「スカラには入力に複数の行があります」という結果につながります。代わりにドット演算子use :: operatorを使用する代わりに、解決策があります。 A :: id、B :: c ... – Gavin

関連する問題