当前位置: 首页 > 面试题库 >

如何将Hadoop路径对象转换为Java File对象

东郭瀚玥
2023-03-14
问题内容

有没有一种方法可以将有效的和现有的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不在等式中,有没有办法让我可靠地将Path转换为File?

**


问题答案:

不是我知道的。

据我了解,PathHadoop中的a表示其分布式文件系统中节点的标识符。这java.io.File与代表本地文件系统上的节点的抽象不同。这是不可能的Path
可能 ,甚至有一个File是会表现得等效表示,由于基本模型是根本不同的。

因此缺乏翻译。根据您的断言,我假设File对象是“
[更多]有用的”,您想要此类的对象以便使用现有的库方法吗?由于上述原因,这将无法很好地工作。如果它是您自己的库,则可以对其进行重写以使其与Hadoop路径完全兼容,然后将任何文件转换为路径对象(此操作适用于路径是文件的严格超集)。如果它是第三方库,那么您很不幸。该方法的作者没有考虑分布式文件系统的影响,而只是将该方法编写为可用于普通的旧本地文件。



 类似资料:
  • 问题内容: 我有文件A的绝对路径。 我有一个从文件A的目录到文件B的相对路径。此路径可以并且将使用“ ..”以任意复杂的方式向上移动目录结构。 范例A: 示例B: 我如何结合这两者以获得 最简单的 绝对路径到文件B? 问题答案: 如果我的问题正确,那么您可以执行以下操作:

  • 问题内容: 在我的 文件系统中, 我的工作目录在这里: C:\ temp \ a \ b \ c \ d 在b \ bb下有文件:tmp.txt C:\ temp \ a \ b \ bb \ tmp.txt 如果要从工作目录转到该文件,请使用以下路径: 如果文件不存在,我想记录完整路径并告诉用户: “文件C:\ temp \ a \ b \ bb \ tmp.txt不存在” 。 我的问题: 我需

  • 问题内容: 如何将String对象转换为Date对象? 我想我需要做这样的事情: 任何帮助将不胜感激。 问题答案: SimpleDateFormat dateFormat = new SimpleDateFormat(“dd.MM.yyyy”); Date date = dateFormat.parse(“1.1.2001”); 有关详细信息,请参阅: SimpleDateFormat文档

  • 问题内容: 如何将Python对象转换为对象? 我有一个提供第一个库的库,另一个提供了第二个库的库。 问题答案: 使用time.mktime()将时间元组(以当地时间为单位)转换为自大纪元以来的秒数,然后使用datetime.fromtimestamp()获得datetime对象。

  • 问题内容: 如何将java对象转换为InputStream? 问题答案: 您可以使用ObjectOutputStream 您将对象(以下代码中的obj)写入ObjectOutputStream,要转换为输入流的对象必须实现Serializable。

  • 问题内容: 如何在Java中将对象转换为int? 问题答案: 如果您确定该对象是: 或者,从Java 7开始,您可以等效地编写: 当心,它可以抛出一个,如果你的对象是不是和你要的对象是。 这样,您就假定对象是一个整数(包装的int),然后将其拆箱为一个int。 是基元,因此不能将其存储为,唯一的方法是将考虑/装箱为,然后存储为。 如果您的对象是,则可以使用方法将其转换为简单的int: 如果您的对象