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

时间:2015-12-04 11:10:33

标签: java scala hadoop hdfs

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

使用shell命令我可以使用以下内容:

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

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

// 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中移动一组文件?

1 个答案:

答案 0 :(得分:3)

您可以使用*.xml

但是如果你想拥有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> } ,就会有像globfilter这样的过滤器文件。

gson