如何通过Spark从HDFS路径中仅提取目录名称
获取HDFS目录下的子目录名称(而非完整路径)
嗨,我懂你现在的困扰——用Spark调用HDFS的FileSystem API时,输出的都是完整路径,却只想拿到最后那一级的目录名对吧?其实不用复杂操作,Path类本身就带了现成的方法能直接搞定~
你原来的代码是打印了完整的Path对象,所以输出的是全路径。只需要在getPath()后面加上getName()方法,就能提取出路径的最后一级名称了。修改后的代码如下:
val fs = FileSystem.get(sc.hadoopConfiguration) val ls = fs.listStatus(new Path("/user/rev/raw_data")) ls.foreach(x => println(x.getPath.getName))
运行这段代码后,你应该就能得到类似这样的输出:
191622-140
201025-001
201025-002
2065-5...
另外,如果你的目标路径下同时存在文件和目录,只想保留目录名称的话,可以再加个过滤条件,确保只处理目录:
val fs = FileSystem.get(sc.hadoopConfiguration) val ls = fs.listStatus(new Path("/user/rev/raw_data")) // 过滤出目录后再提取名称 ls.filter(_.isDirectory).foreach(x => println(x.getPath.getName))
这样就只会输出你想要的子目录名称啦~
内容的提问来源于stack exchange,提问作者Prabhat Ratnala
相关产品推荐
相关产品推荐

