Как вставить заголовочный файл в качестве первой строки в файл данных в HDFS без использования getmerge (проблема с производительностью при копировании на локальный)? - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь вставить header.txt в качестве первой строки в data.txt без использования getmerge. Getmerge копирует в локальный и вставляет в третий файл. Но я хочу в HDFS только

Header.txt

Head1, head2, head3

data.txt

100, John, 28

101, Гилл, 25

102, Джеймс, 29

Я хочу вывод только в файле Data.txt, как показано ниже:

data.txt

Head1, head2, head3

100, John, 28

101, Гилл, 25

102, Джеймс, 29

Подскажите, пожалуйста, можем ли мы реализовать только в HDFS?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Спасибо за ваш ответ.

У меня есть другой способ, например:

Hadoop fs cat hdfs_path / header.txt hdfs_path / data.txt |Hadoop fs -put - hdfs_path / Merged.txt

Это имеет недостаток, поскольку команда cat считывает полные данные, что влияет на производительность.

0 голосов
/ 03 января 2019

HDFS поддерживает операцию concat (сокращение от объединения), в которой два файла объединяются в один без какой-либо передачи данных.Это сделает именно то, что вы ищете.Судя по документации по оболочке файловой системы , она в настоящее время не поддерживается из командной строки, поэтому вам потребуется реализовать ее на Java:

FileSystem fs = ...
Path data = new Path("Data.txt");
Path header = new Path("Header.txt");
Path dataWithHeader = new Path("DataWithHeader.txt");
fs.concat(dataWithHeader, header, data);

После этого Data.txtи Header.txt оба перестают существовать, заменяются DataWithHeader.txt.

...