gpt4 book ai didi

java - 如何在hadoop中将InputStream数据设置为FSDataInputStream

转载 作者:行者123 更新时间:2023-12-01 13:24:06 28 4
gpt4 key购买 nike

有一个使用 bzip2 编解码器压缩的文件。

我解压缩文件并将值设置为InputStream

InputStream inputStream = codec.createInputStream(fs.open(file));

现在我必须将 InputStream 转换为 FSDataInputStream

有人可以帮助我吗?

最佳答案

我只会提供一些实现selalerer给出的解决方案的代码。

正如 selalerer 所解释的,这是不可能的,因为您无法搜索数据,而 FSDataInputStream 需要这样做。因此,您必须创建一个输出流并将输入流的所有数据写入其中,然后就可以使用 FSDataInputStream 打开所述输出流。

这是代码。

(我假设您在 RecordReader 实现中执行此操作,其中您有一个已压缩的对象 FileSplit 拆分)

String uri=split.getPath().toUri().getPath();
InputStream in = null;
OutputStream out = null;
try{
String outputUri =
CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension());
in=codec.createInputStream(fsin);
out = fs.create(new Path(outputUri));
IOUtils.copyBytes(in, out, conf);

fsin= fs.open(new Path(outputUri));
end = Long.MAX_VALUE;
}finally{
IOUtils.closeStream(in);
IOUtils.closeStream(out);
}

希望这对某人有帮助。

关于java - 如何在hadoop中将InputStream数据设置为FSDataInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21875264/

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