如何在不使用getmerge的情况下将头文件作为第一行插入HDFS的数据文件(复制到本地时的性能问题)?

时间:2019-01-02 10:50:11

标签: hadoop merge header hdfs

我试图在不使用getmerge的情况下将header.txt作为第一行插入data.txt。 Getmerge复制到本地并插入第三个文件。但是我只想要HDFS

Header.txt

Head1,Head2,Head3

Data.txt

100,约翰,28

101,吉尔,25

102,詹姆斯,29

我只想在Data.txt文件中输出,如下所示:

Data.txt

Head1,Head2,Head3

100,约翰,28

101,吉尔,25

102,詹姆斯,29

请建议我是否只能在HDFS中实现?

2 个答案:

答案 0 :(得分:0)

HDFS支持concat(连接的缩写)操作,其中两个文件合并在一起成为一个文件,而没有任何数据传输。它会完全满足您的需求。从file system shell guide documentation来看,目前命令行不支持它,因此您需要使用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.txtHeader.txt都不存在,由DataWithHeader.txt取代。

答案 1 :(得分:0)

感谢您的回复。

我有类似的其他方式:

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

这是有缺陷的,因为cat命令会读取影响性能的完整数据。