2017-06-05 80 views
0

我有一個情況下,我需要的格式的行讀取文件可以2種分離

Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3 

雖然一個方式來實現這一目標的分割記錄的讀者是使用記錄讀者喜歡KeyValueLineRecordReader用分隔符#。但我將不得不在我的UDF中使用String.split來分割,的密鑰和值,我覺得它會減慢執行速度。
1.是否有任何記錄閱讀器提供此類格式? 2.如果一個這樣的記錄作者不存在,那麼我有什麼替代方法可以有效地閱讀這樣的記錄?

輸入數據是〜10GB。

回答

0

您可以在分隔

String line = "Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3"; 

String arr [] = line.split(",|#"); 

for (String s : arr) { 
    System.out.println(s); 
} 
+0

我的輸入數據大概是10GB。雖然分裂是我目前使用的東西,但我覺得這是處理它的強力方式。 (沒有什麼可以支持它,而不是直覺)。 – Vishnu

+0

那麼你可以去一個傳統的循環測試每個字符 - 儘管聲音較慢 –

0

使用正則表達式既然你已經標記與Apache豬的問題,我會再給豬一頭solution.Load記錄到1場,以代替#「」然後使用STRSPLIT來獲取單個字段。不需要Java或任何UDF。

A = LOAD 'input.txt' AS (line:chararray); 
B = FOREACH A GENERATE STRSPLIT(REPLACE(line,'#',','),',',9); 
DUMP B;