使用hadoop getmerge在文档之间添加新行

时间:2012-03-14 15:59:20

标签: hadoop hdfs

我试图从hadoop获取一堆文件并将它们合并到一个大文件中,我想在每个文档之间有一个换行符。 hadoop fs -getmerge <src> <localdst> addnl应该做到这一点,但似乎无论如何都不会添加换行符! 我也试过了 hadoop fs -getmerge <src> <localdst> -nl看到此内容后:https://issues.apache.org/jira/browse/HADOOP-7340 但这也行不通。我错过了什么吗?这对任何人都有用吗?

谢谢!

3 个答案:

答案 0 :(得分: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 :(得分:1)

hadoop fs -getmerge <src> <localdst> true

答案 2 :(得分:0)

以下命令对我有用:

hdfs dfs -getmerge -nl <src> <localdst>