2014-05-14 58 views
0

我有一個128 MB的文件,因此它被分成2個塊(塊大小= 64 MB)。 我想一個固定長度的文件轉換爲使用自定義記錄Reader類分隔的ASCII文件記錄讀取器拆分將固定長度轉換爲分隔的ASCII文件

問題:

當文件的第一分流處理,我能得到記錄正常,當我看到在數據頂部的配置單元表中,它也訪問數據節點2以獲取字符,直到記錄結束。 但是,第二次拆分以\ n字符開頭,記錄數量也增加了一倍。

Ex: 
First Split: 456 2348324534   34953489543  349583534 
Second Split: 
456   23   48324534    34953489543  349583534 

作爲記錄讀者序跳過其在第一輸入讀出的字符的一部分分割下面的代碼段中加入

FixedAsciiRecordReader(FileSplit genericSplit, JobConf job) throws IOException { 
if ((start % recordByteLength) > 0) { 
       pos = start - (start % recordByteLength) + recordByteLength; 
      } 
      else { 
       pos = start; 
      } 

      fileIn.skip(pos); 
} 

的輸入的固定長度文件具有\ n字符在每個記錄的末尾。

是否還應將任何值設置爲啓動變量?

回答

0

我找到了解決這個問題的方法,我在我的輸入固定長度文件中沒有跳過一個可變長度的頭文件,所以位置並不完全從記錄的開頭開始,而是從位置開始(StartofRecord - HeaderLength)。這使得每條記錄從前一條記錄中讀取幾個字符(與頭長一樣多)。

更新的代碼:

if ((start % recordByteLength) > 0) { 
     pos = start - (start % recordByteLength) + recordByteLength + headerLength; 
    } 
    else { 
     pos = start;    
    } 

    fileIn.skip(pos); 
相關問題