Добавление новой строки между документами с помощью hasoop getmerge - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь получить кучу файлов из hadoop и объединить их в один большой файл, и я хотел бы иметь новую строку между каждым документом.hadoop fs -getmerge <src> <localdst> addnl должен делать именно это, но он не добавляет новую строку, несмотря ни на что!Я также попробовал hadoop fs -getmerge <src> <localdst> -nl Увидев это: https://issues.apache.org/jira/browse/HADOOP-7340 Но это тоже не работает.Я что-то пропустил?У кого-нибудь это работает?

Спасибо!

Ответы [ 3 ]

1 голос
/ 15 июня 2014
hadoop fs -getmerge <src> <localdst> true
1 голос
/ 21 апреля 2012

Если вы довольны написанием некоторого кода для этого (и не полагаетесь на команды оболочки), вы можете изменить текущий метод 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);
  }
}
0 голосов
/ 06 октября 2015

У меня сработала следующая команда:

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