3

私はAmazonのエラスティックマップリデュースを使用しています。

このようなログファイルがあります

   random text foo="1" more random text foo="2"
   more text notamatch="5" noise foo="1"
   blah blah blah foo="1" blah blah foo="3" blah blah foo="4" ...

'foo'式のすべての数値を選択するためにpig式を作成するにはどうすればよいですか?

私は次のようなタプルを好みます:

(1,2)
(1)
(1,3,4)

私は次のことを試しました:

TUPLES = foreach LINES generate FLATTEN(EXTRACT(line,'foo="([0-9]+)"'));

ただし、これにより、各行の最初の一致のみが生成されます。

(1)
(1)
(1)
4

2 に答える 2

0

使用できますSTRSPLIThttp://pig.apache.org/docs/r0.8.0/piglatin_ref2.html#STRSPLIT

分割する正規表現は次のようになります[^0-9]+ (つまり、数字ではありません)。これにより、数字以外の大きな部分が効果的に分割され、数字のトークンのみが残ります。

もう 1 つのオプションは、Pig UDF を作成することです。

于 2010-12-30T14:49:10.120 に答える
0

REGEX_EXTRACT 関数は、目的の出力を得るのに役立つ場合があります

REGEX_EXTRACT(input, 'foo=(.*)',2) AS 入力;

于 2014-09-04T07:13:30.140 に答える