将 Hadoop `FileStatus` 映射回 URI 基本相对路径
Mapping Hadoop `FileStatus` back to URI base relative path
我是 运行 一个 Hadoop map reduce 作业,它使用了一些 FileSystem
实现。当我向 FileSytem
询问根路径 /
的 FileStatus
时,它返回 FileStatus
并且 FileStatus.getPath()
设置为 foo://bar/
.自然是这个Path.toUri()
returnsfoo://bar/
.
显然,我正在使用的 FileSystem
实现将“裸”绝对路径解释为相对于某些上下文 URI。 (这让我想起 Java EE servlet 上下文映射,其中绝对 servlet 路径 /bar
将相对于某些上下文基本路径 /foo/
进行解释,产生 /foo/bar
。)
一切都很好,但是我如何映射到另一个方向?给定一些 FileStatus
和 FileStatus.getPath()
返回 foo://bar/
,我怎样才能找回 /
的原始“裸”路径?
(或者这个特定的 FileStatus
实现有问题,FileStatus.getPath()
应该返回 /
开始?我找不到任何 Hadoop FileSystem
描述这应该如何工作的文档。)
虽然它可能看起来是路径的一部分,但 foo://bar/
的 bar
部分实际上是 java.net.URI
API docs 中解释的 URI 权限——类似于 example.com
在 URL https://example.com/test.html
中。因此要返回原始路径,需要调用FileStatus.getPath().toUri().getPath()
,这将return权限后的URI部分。
我是 运行 一个 Hadoop map reduce 作业,它使用了一些 FileSystem
实现。当我向 FileSytem
询问根路径 /
的 FileStatus
时,它返回 FileStatus
并且 FileStatus.getPath()
设置为 foo://bar/
.自然是这个Path.toUri()
returnsfoo://bar/
.
显然,我正在使用的 FileSystem
实现将“裸”绝对路径解释为相对于某些上下文 URI。 (这让我想起 Java EE servlet 上下文映射,其中绝对 servlet 路径 /bar
将相对于某些上下文基本路径 /foo/
进行解释,产生 /foo/bar
。)
一切都很好,但是我如何映射到另一个方向?给定一些 FileStatus
和 FileStatus.getPath()
返回 foo://bar/
,我怎样才能找回 /
的原始“裸”路径?
(或者这个特定的 FileStatus
实现有问题,FileStatus.getPath()
应该返回 /
开始?我找不到任何 Hadoop FileSystem
描述这应该如何工作的文档。)
虽然它可能看起来是路径的一部分,但 foo://bar/
的 bar
部分实际上是 java.net.URI
API docs 中解释的 URI 权限——类似于 example.com
在 URL https://example.com/test.html
中。因此要返回原始路径,需要调用FileStatus.getPath().toUri().getPath()
,这将return权限后的URI部分。