這是我的樣本數據使用REGEX_EXTRACT_ALL,如何豬
subId=00001111911128052627,towerid=11232w34532543456345623453456984756894756,bytes=122112212212212218.4621702216543667E17
subId=00001111911128052639,towerid=11232w34532543456345623453456984756894756,bytes=122112212212212219.6726312167218586E17
subId=00001111911128052615,towerid=11232w34532543456345623453456984756894756,bytes=122112212212212216.9431647633139046E17
我的預期產出將是一個元組,其中每個字段表示一個匹配的組:
(capturing_group1,capturing_group2,.. 。,capturing_groupN)
例如(00001111911128052627,11232w34532543456345623453456984756894756,122112212212212216.9431647633139046E17)
這是我的方法,
A = load '/home/hduser/Desktop/arrtest1.txt' using TextLoader as (line:chararray);
b = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(.*)[subId=](.*)[towerid=](.*)[bytes=](.*)')) AS (F1,F2,F3);
但我沒有得到我的結果。
你有4個捕獲組定義,但你只需要3個。此外,你正在使用'[subId =]'等字符類匹配集合中的1個符號('s'或'u')。 ..或'=')。 '。*'太貪婪,所以你得到的結果是出乎意料的。嘗試'A = LOAD'/home/hduser/Desktop/arrtest1.txt'使用TEXTLOADER()AS(LINE:CHARARRAY); b = FOREACH A GENERATE FLATTEN( REGEX_EXTRACT_ALL(LINE,'^ subId =([^ =] *)bytes =([^ =] *)$')) AS :CHARARRAY,F2:CHARARRAY,F3:CHARARRAY),LINE;' –
@stribizhev:''REGEX_EXTRACT_ALL''返回一個包含所有捕獲組的元組,逗號''''在數據結構中不在提取的字符串中(我已經在在線演示中重新創建了元組作爲字符串,只是爲了顯示與期望的OP結果匹配)。 –