我正在尝试将标题.txt作为第一行插入数据.txt而不使用 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中实现?
HDFS支持concat
(连接缩写)操作,其中两个文件合并为一个,而无需任何数据传输。它将完全满足您的需求。从文件系统 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
.
感谢您的回复。
我得到了其他方式,例如:
Hadoop fs cat hdfs_path/header.txt hdfs_path/data.txt |Hadoop fs -put - hdfs_path/Merged.txt
这有缺点,因为 cat 命令读取影响性能的完整数据。