如何从Apache Spark

时间:2017-09-26 06:23:05

标签: scala hadoop apache-spark hdfs spark-streaming

我使用dstream.saveAsObjectFiles("/temObj")方法在火花流中保存了目标文件,它在hdfs中显示了多个文件。

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

我想在阅读完所有内容后删除所有temObj文件。什么是在火花中做到这一点的赌注方式。我试过了

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) 

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

1 个答案:

答案 0 :(得分:4)

不幸的是,删除并不支持全局。

您可以使用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*" !