【发布时间】:2014-08-29 06:38:04
【问题描述】:
我有一个包含 +100,000 个文件的输入文件夹。
我想对它们进行批量操作,即以某种方式重命名它们,或者根据每个文件名中的信息将它们移动到新路径。
我想使用 Spark 来做这件事,但不幸的是,当我尝试以下代码时:
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);
}
});
我收到 hadoop.fs.FileSystem 不可序列化的错误(因此可能无法用于并行操作)
知道如何解决它或以其他方式解决吗?
【问题讨论】:
标签: hadoop parallel-processing bigdata apache-spark