2013-11-20 45 views
0

我在HDFS中有一個製表符分隔的文本文件。在嘗試使用選項卡進行分割時,文件中的第一列未被存儲。相同的代碼在正常的日食中起作用。但是,在hadoop中運行時,第一列值將被忽略。從文件關於HDFS文件內容的Java拆分方法

採樣線:

002\tCK 00 - 01/02/2012\t100000\t0.02\t330\t3863\t3863 FOOD 

代碼剪斷:

String subvalues[] = value.split("\t"); 
v1= subvalues[5]; 
v2=subvalues[0]; 
v3=subvalues[1]; 

請幫助。

回答

0

value.split("\t")將由製表符分割。但是,這一行也可能有空格。您可以嘗試與拆分正則表達式的空間您的線路:

String subvalues[] = value.split("\\s+"); 

對於您的更新 - 可能是你需要逃避你\tvalue.split("\\t")value.split("\\t|\\s+");

備註:通常使用\t作爲數據的語義分隔符,因此您可能需要在分割\t後解析列。

如果這沒有幫助,您可以記錄字符串的ascii值以查看字符在那裏。

+0

我試過的選項不工作。關鍵是除第一個以外的所有價值都正確分裂。不知道爲什麼它單獨忽略了第一個領域。 – user2401464

+0

它可能包含一個不同的類似空間的分離器。您可以將您的ASCII/UTF8代碼轉儲到控制檯以查看站在哪裏? –

0

感謝您的建議。問題解決了。這個問題是在mapper中運行的,tabper分隔線正在被處理。默認情況下,第一個選項卡是用來分隔鍵和值在mapper.Removing財產

job.setInputFormatClass(KeyValueTextInputFormat.class); 

解決了這個問題。

謝謝