我想在一个目录下添加两个目录的文件,同时维护目录结构。
我有目录1和目录2,每个目录都有大约80个子目录,结构如下所示。
hdfs上的目录1:
/用户/hadoop/1//file11
/user/hadoop/1/def/file12
/用户/hadoop/1/ghi/file13
/用户/hadoop/1/jkl/file14
/user/hadoop/1/mno/file15
hdfs上的目录2:
/用户/hadoop/2//file26
/用户/hadoop/2/ghi/file27
/用户/hadoop/2/mno/file28
我想将dir1的文件11和dir2的文件26合并到一个目录下,dir1的文件13和dir27以此类推。目标目录是目录1。
从目录2添加到目录1的文件应与子目录的路径匹配。
期望输出:
/user/hadoop/1//file11,/user/hadoop/1//file26
/user/hadoop/1/def/file12
/user/hadoop/1/ghi/file13,/user/hadoop/1/ghi/file27
/用户/hadoop/1/jkl/file14
/user/hadoop/1/mno/file15,/user/hadoop/1/mno/file28
感谢您的帮助。
2条答案
按热度按时间dfty9e191#
使用
org.apache.hadoop.fs.FileUtil
应用程序编程接口你得到了吗
FileSystem
带以下api复制
公共静态布尔复制(filesystem srcfs,path[]srcs,filesystem dstfs,path dst,boolean deletesource,boolean overwrite,conf)抛出ioexception抛出:ioexception
此方法在文件系统之间复制文件。
替换文件
FileUtil.replaceFile(File src, File target)
也应该有用请参阅此方法的文档“将src文件移到target指定的名称”
在这两种情况下,您都需要列出您的公用文件夹/user/hadoop/2///user/hadoop/1//,方法是在第三个斜杠字符后进行比较,以及它们是否匹配复制源和目标,或者根据您的要求开发逻辑(我将把它留给您:-)
复制到所需目标后:您可以使用下面的示例方法在流上看到它们
drkbr07n2#
我将为目录2下的每个文件获取一个唯一的文件名,并将其添加到目录1下的右子目录中。脚本如下: