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

qyzbxkaa  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(612)

我正在尝试将header.txt作为第一行插入data.txt,而不使用getmerge。getmerge复制到本地并插入到第三个文件中。但我只想要hdfs
标题.txt
头1,头2,头3
数据.txt
100,约翰,28岁
101,吉尔,25
102岁,詹姆斯,29岁
我希望以data.txt文件输出,如下所示:
数据.txt
头1,头2,头3
100,约翰,28岁
101,吉尔,25
102岁,詹姆斯,29岁
请建议我是否可以只在hdfs中实现?

e4eetjau

e4eetjau1#

谢谢你的回复。
我有其他的方法,比如:
hadoop fs cat hdfs_path/header.txt hdfs_path/data.txt | hadoop fs-put-hdfs_path/merged.txt
这是一个缺点,因为cat命令会读取影响性能的完整数据。

avkwfej4

avkwfej42#

hdfs支持 concat (concatenate的缩写)将两个文件合并成一个文件而不进行任何数据传输的操作。它能完全满足你的需求。根据文件系统shell指南文档判断,命令行当前不支持它,因此需要用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 .

相关问题