2011-04-18 66 views
1

這是一種奇怪的情況,但我正在尋找一種方法來使用類似MATCHES的方式進行過濾,但在未知模式(未知長度)的列表中進行過濾。Hadoop/Pig正則表達式匹配

也就是說,如果給定的輸入是兩個文件,一個用數字答:

XXXX

YYYY

ZZZZ

zzyy

...等等。

而另一個模式B:

XX。*

YYY。*

...等...

我怎樣才能篩選第一輸入,所有在第二的模式?

如果我事先知道所有模式,我可以 A = FILTER A BY(num MATCHES'somepattern。*'OR num MATCHES'someotherpattern'....);

問題是我之前並不知道它們,既然它們是模式而不是簡單的字符串,我不能只使用連接/組(至少據我所知)。 也許是一個奇怪的嵌套FOREACH ...的東西? 有什麼想法嗎?

回答

3

如果您使用的|作爲OR運行,您可以從各個模式中構建模式。

(xx.*|yyy.*|zzzz.*) 

這將檢查它是否匹配任何模式。

編輯: 要創建合併的正則表達式模式:
*創建字符串(
*讀取在每行開始(假設每一行是一個圖案),並將它附加到字符串後面是|
*當讀完行,刪除最後一個字符(這將是一個不需要|
*附加一個)

這將創建一個正則表達式來檢查所有模式中輸入文件。 (注意:假定文件包含有效模式)

+0

這是如何以編程方式完成的?正如我所說,我並不知道這些模式中有多少(或者它們的內容,顯然)是事先知道的。 – SubSevn 2011-04-18 18:10:21

+0

@SubSevn:更新了邏輯 – Nija 2011-04-18 18:27:47

+0

的帖子所以沒有辦法用直豬做到這一點? – SubSevn 2011-04-18 18:28:59