0
B = GROUP A BY state;
C = FOREACH B {                          
   DA = ORDER A BY population DESC;                
   DB = LIMIT DA 5;                         
   GENERATE FLATTEN(group), FLATTEN(DB.name), FLATTEN(DB.population);
}

問題は、都市の名前を 1 回ではなく 5 回取得することです。次のような結果が得られます。

(ALASKA,M,27257)
(ALASKA,M,23696)
(ALASKA,M,19949)
(ALASKA,M,19926)
(ALASKA,M,19833)
(ALASKA,H,27257)
(ALASKA,H,23696)
(ALASKA,H,19949)
(ALASKA,H,19926)
(ALASKA,H,19833)

そして、私が必要とする出力は次のとおりです。

(ALASKA,M,27257)
(ALASKA,H,23696)
4

1 に答える 1

1

2 フラット化: FLATTEN(DB.name)、FLATTEN(DB.population); 2つの袋の間でデカルト積を引き起こし、それを1つに置き換えます

B = GROUP A BY state;
C = FOREACH B {                          
   DA = ORDER A BY population DESC;                
   DB = LIMIT DA 5;                         
   GENERATE FLATTEN(group), FLATTEN(DB.(name, population));
}

または、GROUP BY によって作成されたバッグは、すべての列を含むすべての元のタプルを保持するため、次のようにすることができます。

B = GROUP A BY state;
C = FOREACH B {                          
   DA = ORDER A BY population DESC;                
   DB = LIMIT DA 5;                         
   GENERATE FLATTEN(DB);
}
于 2012-12-04T09:21:06.020 に答える