2

Hadoop Pig (0.10.0) を使用してログ ファイルを処理しています。ログ行は次のようになります。

2012-08-01  INFO   (User:irim)   getListedStocksByMarkets completed in 7041 ms

空白で分割されたトークンとの関係を取得したいと思います。つまり、次のとおりです。

(2012-08-01,INFO,(User:irim),getListedStocksByMarkets,completed,in,7041,ms)

ステートメントでそのデータをロードする:

records = LOAD 'myapp.log' using PigStorage(' ');

私のトークンはいくつかの空のトークンにつながるいくつかの空白で区切られる可能性があるため、それを達成できませんでした。PigStorage は正規表現区切り文字をサポートしていないようです (または、少なくともそのように構成することに成功していません)。

だから私の質問: それらのトークンを取得するための最良の方法は何でしょうか?

リレーションから空の要素を削除できれば幸いですが、 Pig でそれを行うことは可能ですか?

たとえば、次のように開始します。

(2012-08-01,,,INFO,,,(User:irim),,getListedStocksByMarkets,completed,in,7041,ms)

取得するため

(2012-08-01,INFO,(User:irim),getListedStocksByMarkets,completed,in,7041,ms)

それから別のアプローチを試みていますが、TextLoaderそれTOKENIZEが最善の戦略であるかどうかはわかりません。おそらく、ユーザー負荷関数の方がより自然な選択です...

よろしく、

ジョエル

4

1 に答える 1

2

組み込み関数STRSPLITを正規表現とともに使用して、行をタプルに分割できます。区切り文字としてコンマを使用した特定の例のスクリプトを次に示します。

inpt = load '~/data/regex.txt' as (line : chararray);
dump inpt;
-- 2012-08-01,,,INFO,,,(User:irim),,getListedStocksByMarkets,completed,in,7041,ms

splt = foreach inpt generate flatten(STRSPLIT(line, ',+'));
dump splt;
-- (2012-08-01,INFO,(User:irim),getListedStocksByMarkets,completed,in,7041,ms)
于 2012-08-13T21:11:42.240 に答える