Ho una cartella di input che contiene +100.000 file.Come rinominare una quantità enorme di file in Hadoop/Spark?
Vorrei eseguire un'operazione batch, ad esempio rinominarli tutti in un determinato modo o spostarli in un nuovo percorso in base alle informazioni nel nome di ogni file.
Vorrei utilizzare Spark per farlo, ma purtroppo quando ho provato il seguente pezzo di codice:
final org.apache.hadoop.fs.FileSystem ghfs = org.apache.hadoop.fs.FileSystem.get(new java.net.URI(args[0]), new org.apache.hadoop.conf.Configuration());
org.apache.hadoop.fs.FileStatus[] paths = ghfs.listStatus(new org.apache.hadoop.fs.Path(args[0]));
List<String> pathsList = new ArrayList<>();
for (FileStatus path : paths) {
pathsList.add(path.getPath().toString());
}
JavaRDD<String> rddPaths = sc.parallelize(pathsList);
rddPaths.foreach(new VoidFunction<String>() {
@Override
public void call(String path) throws Exception {
Path origPath = new Path(path);
Path newPath = new Path(path.replace("taboola","customer"));
ghfs.rename(origPath,newPath);
}
});
ottengo un errore che hadoop.fs.FileSystem non è Serializable (e quindi probabilmente non ci riesco essere utilizzato in operazioni parallele)
Qualche idea su come posso risolvere il problema o farlo in un altro modo?
Grazie! questa è esattamente la direzione che prenderò! –