В моем apache лучевом конвейере я получаю файл формата .tar.gz и хочу распаковать файл tar и сохранить его содержимое в облаке minio. Я использую следующий способ, чтобы распаковать файл, но, несмотря на это, я могу сохранить его в локальном хранилище, но он не будет работать для хранения его в облаке minio, т.е. play.min.io, и я использую apache common compress to untar.
@DoFn.ProcessElement
public void processElement(@Element ReadableFile element, Void) throws IOException {
InputStream is = Channels.newInputStream(element.open());
TarArchiveInputStream tis = new TarArchiveInputStream(is);
File destFile = new File("C:\\Users\\Downloads\\Compressed\\unzip");
if(!destFile.exists()){
destFile.mkdir();
}
TarArchiveEntry tarEntry = null;
while ((tarEntry = tis.getNextTarEntry()) != null) {
File outputFile = new File(destFile + File.separator + tarEntry.getName());
if(tarEntry.isDirectory()){
if(!outputFile.exists()){
outputFile.mkdirs();
}
}else{
outputFile.getParentFile().mkdirs();
FileOutputStream fos = new FileOutputStream(outputFile);
IOUtils.copy(tis, fos);
fos.close();
}
}
tis.close();
}
}
pipe
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline pipeline=Pipeline.create(options);
PCollection files=pipeline.apply(FileIO.match().filepattern("C:\\Users\\Downloads\\Compressed\\Ziped.tar.gz"))
.apply(FileIO.readMatches().withCompression(Compression.GZIP));
files.apply(ParDo.of(new unzip()));
pipeline.run().waitUntilFinish();
При хранении файлов в minio он использует хранилище объектов, но этот код создает поток вывода. Может ли кто-нибудь помочь мне с кодом. Заранее спасибо