有没有办法将有效的和现有的Hadoop Path对象更改为有用的Java File对象.有没有一种很好的方法可以做到这一点,还是我需要敲诈来编码提交?更明显的方法不起作用,似乎它是一个常见的代码
void func(Path p) { if (p.isAbsolute()) { File f = new File(p.toURI()); } }
这不起作用,因为Path :: toURI()返回"hdfs"标识符,Java的File(URI uri)构造函数只识别"文件"标识符.
有没有办法让Path和File一起工作?
**
好的,一个特定的有限例子怎么样.
Path[] paths = DistributedCache.getLocalCacheFiles(job);
DistributedCache应该提供文件的本地化副本,但它返回一个Path.我假设DistributedCache制作文件的本地副本,它们位于同一磁盘上.鉴于这个有限的例子,hdfs希望不在等式中,有没有办法让我可靠地将Path转换为文件?
**
我最近有同样的问题,并且确实有一种从路径获取文件的方法,但它需要临时下载文件.显然,这不适用于许多任务,但如果时间和空间对您来说不是必需的,并且您只需要使用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; } }