2017-09-26 3 views
0

J'ai des fichiers objets persistants dans le streaming étincelle en utilisant la méthode dstream.saveAsObjectFiles("/temObj") il montre plusieurs fichiers dans hdfs.Comment faire pour supprimer plusieurs répertoires hdfs en commençant par un mot dans Apache Spark

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

Je souhaite supprimer tous les fichiers temObj après avoir tout lu. Quel est le moyen de le faire en étincelle. J'ai essayé

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) 

Mais il ne peut supprimer le dossier ane à un moment

+0

Est-il possible d'utiliser des jokers '' * dans le chemin lors de la suppression? – Shaido

+0

Je l'ai essayé mais ça ne marche pas –

Répondre

2

Malheureusement, supprimer ne supporte pas les petites boules.

Vous pouvez utiliser globStatus et parcourir les fichiers/répertoires un par un et les supprimer.

val hdfs = FileSystem.get(sc.hadoopConfiguration) 

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

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

Vous pouvez également utiliser sys.process pour exécuter des commandes shell

import scala.sys.process._ 

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

Merci beaucoup. Cela fonctionne pour moi mais votre dernière ligne a besoin de modification fs à hdfs –

+0

édité. Merci de m'avoir signalé. – philantrovert