如何从apachespark中的某个单词开始删除多个hdfs目录

cxfofazt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(411)

我在spark流中使用 dstream.saveAsObjectFiles("/temObj") 方法在hdfs中显示多个文件。

temObj-1506338844000
temObj-1506338848000
temObj-1506338852000
temObj-1506338856000
temObj-1506338860000

我想在读取所有temobj文件后删除所有temobj文件。在spark中,下注的方式是什么。我试过了

val hdfs = org.apache.hadoop.fs.FileSystem.get(new java.net.URI("hdfs://localhost:9000"), hadoopConf)
hdfs.delete(new org.apache.hadoop.fs.Path(Path), true)

但它一次只能删除一个文件夹

gev0vcfq

gev0vcfq1#

很遗憾,delete不支持globs。
你可以用 globStatus 然后逐个遍历文件/目录并删除它们。

val hdfs = FileSystem.get(sc.hadoopConfiguration)

val deletePaths = hdfs.globStatus(new Path("/tempObj-*") ).map(_.getPath)

deletePaths.foreach{ path => hdfs.delete(path, true) }

或者,您可以使用 sys.process 执行shell命令

import scala.sys.process._

"hdfs dfs -rm -r /tempObj*" !

相关问题