gpt4 book ai didi

java - HDFS:使用 Java/Scala API 移动多个文件

转载 作者:可可西里 更新时间:2023-11-01 16:25:32 32 4
gpt4 key购买 nike

我需要使用 Java/Scala 程序移动 HDFS 中的多个文件,这些文件对应于给定的正则表达式。例如,我必须将名称为 *.xml 的所有文件从文件夹 a 移动到文件夹 b

使用 shell 命令,我可以使用以下命令:

bin/hdfs dfs -mv a/*.xml b/

我可以使用 Java API 移动单个文件,使用以下代码(scala 语言),使用 FileSystem 类上的 rename 方法:

// Prepare initial configuration
val conf = new Configuration()
conf.set("fs.defaultFS", "hdfs://hdfs:9000/user/root")
val fs = FileSystem.get(conf)
// Move a single file
val ok = fs.rename(new Path("a/file.xml"), new Path("b/file.xml"));

据我所知Path类代表一个 URI。然后,我不能通过以下方式使用:

val ok = fs.rename(new Path("a/*.xml"), new Path("b/"));

有没有办法通过 Java/Scala API 在 HDFS 中移动一组文件?

最佳答案

您可以使用 fs.rename(new Path("a"), new Path("b"))

但是如果你想要 *.xml 有像 globfilter 这样的过滤文件。

FileSystem fs = FileSystem.get(URI.create(arg0[0]), conf);
Path path = new Path(arg0[0] + arg0[1]); // arg0[1] NYSE_201[2-3]
//arg0[0] is base path
//ar0[1] uses regular expression

FileStatus[] status = fs.globStatus(path);
Path[] paths = FileUtil.stat2Paths(status);
for (Path p : paths) {
// <loops all the source paths>
// <need to implement logic to rename the paths using fs.rename>
}

关于java - HDFS:使用 Java/Scala API 移动多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087020/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com