2017-09-26 8 views
0

私はdstream.saveAsObjectFiles("/temObj")を使用してスパークストリーミングでオブジェクトファイルを保持しています。これはhdfsに複数のファイルを表示します。Apache Sparkの単語で始まる複数の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) 

を試みたが、それだけの時間残念なことに

+0

を削除するときのパスにワイルドカード '*'を使用することが可能ですコマンドを実行するためsys.processを使用することができますか? – Shaido

+0

私はそれを試しましたが、それは仕事をdosen't –

答えて

2

でANEフォルダを削除することができ、削除グロブをサポートしていません。

globStatusを使用して、ファイル/ディレクトリを1つずつ繰り返して削除できます。

val hdfs = FileSystem.get(sc.hadoopConfiguration) 

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

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

また、あなたはシェルが

import scala.sys.process._ 

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

ありがとうございました。それは私のために働くが、最後の行は、fdからhdfsに変更する必要があります –

+0

編集されました。指摘してくれてありがとう。 – philantrovert

関連する問題