我试图在不使用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中实现?
答案 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.txt
和Header.txt
都不存在,由DataWithHeader.txt
取代。
答案 1 :(得分:0)
感谢您的回复。
我有类似的其他方式:
Hadoop fs猫hdfs_path / header.txt hdfs_path / data.txt | Hadoop fs -put-hdfs_path / Merged.txt
这是有缺陷的,因为cat命令会读取影响性能的完整数据。