2012-03-14 19 views
2

我想從hadoop中獲取一堆文件並將它們合併成一個大文件,並且我希望在每個文檔之間有一個換行符。 hadoop fs -getmerge <src> <localdst> addnl應該這樣做,但它似乎並不添加換行符! 我也試過 hadoop fs -getmerge <src> <localdst> -nl看到這個之後:https://issues.apache.org/jira/browse/HADOOP-7340 但是這也不起作用。我錯過了什麼嗎?這對任何人都適用嗎?用hadoop在文檔之間添加一個新行getmerge

謝謝!

回答

1

如果您對編寫一些代碼來完成此操作感到滿意(而不依賴於shell命令),則可以修改當前的FsShell.copyMergeToLocal方法(即hadoop fs -getmerge調用的方法)以包含自定義文件分隔字符串( 「\ n \ n」 你的情況):

void copyMergeToLocal(String srcf, Path dst, String fileSeparatorString) throws IOException { 
    Path srcPath = new Path(srcf); 
    FileSystem srcFs = srcPath.getFileSystem(getConf()); 
    Path [] srcs = FileUtil.stat2Paths(srcFs.globStatus(srcPath), 
            srcPath); 
    for(int i=0; i<srcs.length; i++) { 
     FileUtil.copyMerge(srcFs, srcs[i], 
      FileSystem.getLocal(getConf()), dst, false, 
      getConf(), fileSeparatorString); 
    } 
} 
1
hadoop fs -getmerge <src> <localdst> true 
0

下面的命令爲我工作:

hdfs dfs -getmerge -nl <src> <localdst> 
相關問題