2017-09-26 110 views
0

我使用dstream.saveAsObjectFiles("/temObj")方法在hdfs中顯示了多個文件,並在spark spark中保存目標文件。如何在Apache Spark中刪除多個以hdfs開頭的多個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) 

但它只能一次刪除文件夾ANE

+0

是否有可能刪除時,在路徑通配符'*'用? – Shaido

+0

我試過了,但沒有成功 –

回答

2

不幸的是,刪除不支持的水珠。

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

非常感謝。它適用於我,但您的最後一行需要修改fs到hdfs –

+0

編輯。感謝您指出。 – philantrovert