作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有办法将现有的有效 Hadoop Path 对象更改为有用的 Java File 对象。有没有一种很好的方法可以做到这一点,还是我需要大刀阔斧地编写代码才能提交?更明显的方法不起作用,它似乎是一段普通的代码
void func(Path p) {
if (p.isAbsolute()) {
File f = new File(p.toURI());
}
}
这不起作用,因为 Path::toURI() 返回“hdfs”标识符,而 Java 的 File(URI uri) 构造函数只识别"file"标识符。
有没有办法让 Path 和 File 一起工作?
**
好的,举个具体的有限例子怎么样。
Path[] paths = DistributedCache.getLocalCacheFiles(job);
DistributedCache 应该提供文件的本地化副本,但它返回一个路径。我假设 DistributedCache 制作文件的本地副本,它们位于同一磁盘上。考虑到这个有限的示例,希望 hdfs 不在等式中,有没有办法可靠地将路径转换为文件?
**
最佳答案
我最近也有同样的问题,确实有一种方法可以从路径中获取文件,但它需要临时下载文件。显然,这不适合许多任务,但如果时间和空间对您来说不是必需的,并且您只需要使用 Hadoop 中的文件来工作,请执行以下操作:
import java.io.File;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public final class PathToFileConverter {
public static File makeFileFromPath(Path some_path, Configuration conf) throws IOException {
FileSystem fs = FileSystem.get(some_path.toUri(), conf);
File temp_data_file = File.createTempFile(some_path.getName(), "");
temp_data_file.deleteOnExit();
fs.copyToLocalFile(some_path, new Path(temp_data_file.getAbsolutePath()));
return temp_data_file;
}
}
关于java - 如何将 Hadoop Path 对象转换为 Java File 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444313/
我是一名优秀的程序员,十分优秀!