2012-03-08 7 views
1
recs = load 'a.txt'; 
grp = group recs with each group having 5 records; 

私は上記のようなことをする必要があります。
recsに10個のレコードがある場合は、
各グループにそれぞれ5個のレコードがあるようにグループを作成します。豚 - 所定のサイズのグループを作成する

どうすればよいですか?

答えて

0

スケーラブルなソリューションは、UDFは新しい袋にレコードを蓄積し、それは5つの要素及び空袋(またはnull)を有する場合、それはまだ5つの要素を持っていない場合袋を出力有することとすることができます。

1つの欠点は、各マップの最後のグループが5つ未満の要素を持つ可能性があることです(nullを埋め込むか、すべて破棄/再グループ化することができます)。コメントを

recs = load 'a.txt'; 
grp_5 = foreach recs generate GROUPER(*, 5) as group; 
grp = filter grp by not IsEmpty(group); 

編集:UDFは通常instantiatedマップの冒頭に、その幹部は、()レコードごとに呼ばれているよう

通常のバッグの属性が良いでしょう。 MAX関数のように、すべてのレコードをストリーミングするようなものを考えてください。

+0

したがって、UDFクラスで静的変数を使用する必要がありますか?それとも他の方法がありますか? – dharm0us

+0

非静的属性を使用するUDFのライフサイクルのために、より安全でなければなりません。 – Romain

関連する問題