0

豚で遊んで、私の入力ファイルは次のとおりです。

1、4、6

1、2、7、9

2、5、1

1、3、5、1

2、6、2、8

各行の最初の値は ID です。行の残りの部分は単純に一意の値です (各行は異なる数の列を持つことができます)。

上記を次のように転置したい:

1、2、4、6、7、9、3、5、1

2、5、1、6、2、8

したがって、基本的には ID でグループ化してから、残りの列をフラット化し、それを各行として出力します。

ここでもPIGは正しいアプローチですか?M/R でこれを行う方法はありますが、Pig はこの種のことには理想的かもしれないと考えました。

提供されたヒントに感謝します

ダンカン

PS私は値の順序を気にしません。

4

1 に答える 1

2

テストされていませんが、私が取る一般的なアプローチは次のとおりです。ID と値のバッグを含む変数を取得し、それを平坦化して、ID と単一の値のみの行を取得し、個別の行を取得してから、ID でグループ化します。これにより、出力したい場合は文字列に変換できる各 ID の値のバッグが得られます。

A = LOAD 'input' USING TextLoader() as line:chararray; 
B = FOREACH A GENERATE STRSPLIT(line,',',2) as (id:chararray,values:chararray)
C = FOREACH B GENERATE id, FLATTEN(TOBAG(STRSPLIT(values,','))) as value:chararray;
D = DISTINCT C; -- I'm assuming you actually want distinct values, wasn't clear.
E = GROUP D by id;
F = FOREACH E GENERATE group as id, BagToString(D.value) as valueString:chararray;
于 2013-04-18T02:37:47.123 に答える