2010-12-30 4 views
3

私はAmazonの弾性マップを使っています。PIGをHadoopで使用すると、不完全な数のグループとテキストの部分を正規表現するにはどうすればよいですか?

私は「foo」で式の中のすべての数字を選び出すために豚の式を書くことができますどのようにこの

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" ... 

のようなものを見てログファイルを持っていますか?

私はこのような何かを見てタプルを好む:

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

私は次のことを試してみた:

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

しかし、これは各行の最初の一致が得られます

(1) 
(1) 
(1) 

答えて

0

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

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

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

+0

はい、あなたは正しいです。残念ながら、私の例は、私が実際に一致させたくない他の数値式を実際に持っていることを示していないという点で誤解を招いていました。私は私の例をより具体的に更新しました。 – lmonson

+0

これを行うにはPig UDFを使用できませんか? –

0

REGEX_EXTRACT機能は、ご希望の出力

入力AS REGEX_EXTRACT(2入力、 'FOO =(*)を'、)を取得するためにあなたを助けるかもしれません。

関連する問題