如何用豬處理平面文件?例如,如果你有一行包含一個記錄,其中前四個位置是一年,那麼接下來的5個是產品代碼,最後8個記錄包含MSRP,你如何用Pig查詢這些數據?我可能錯過了一些簡單的東西,但是到目前爲止我發現的一切都需要在使用Pig加載數據時使用分隔符。預先用豬處理平面文件
1999ABCDE12234.00
2000DCEFS00020.00
2012FFEWS00005.55
感謝:
某些樣本數據提供如下。
傑里米
如何用豬處理平面文件?例如,如果你有一行包含一個記錄,其中前四個位置是一年,那麼接下來的5個是產品代碼,最後8個記錄包含MSRP,你如何用Pig查詢這些數據?我可能錯過了一些簡單的東西,但是到目前爲止我發現的一切都需要在使用Pig加載數據時使用分隔符。預先用豬處理平面文件
1999ABCDE12234.00
2000DCEFS00020.00
2012FFEWS00005.55
感謝:
某些樣本數據提供如下。
傑里米
一個分裂基於位置的線的方法是使用REGEX_EXTRACT_ALL。
E.g:
A = LOAD 'flat.txt' as (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,
'^(.{1,4})(.{1,5})(.*)$')) AS (year:int, prod_code:chararray, msrp:double);
dump B;
(1999,ABCDE,12234.00)
(2000,DCEFS,00020.00)
(2012,FFEWS,00005.55)
也有一個內置的字符串函數,
A = LOAD 'flat.txt' as (line:chararray);
B = FOREACH A GENERATE SUBSTRING(line,0,3),SUBSTRING(line,4,8),SUBSTRING(line,9,16);
dump B;
兩個以前的答案是偉大的。另外,如果輸入字符串很複雜或需要條件解析,則可以實現自己的UDF
我假設這種方法效率不高,而且我希望將它與分隔符一起存儲以供將來處理,那是對的嗎? – jwmajors81
你可以肯定地調整這個正則表達式,但是如果你有可能用分隔符存儲數據,那麼確實比處理複雜正則表達式更有效 –