gpt4 book ai didi

java - 如何将 Hadoop Path 对象转换为 Java File 对象

转载 作者:可可西里 更新时间:2023-11-01 14:12:33 24 4
gpt4 key购买 nike

有没有办法将现有的有效 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com