Как распаковать файл .tar.gz в apache beam java sdk - PullRequest
0 голосов
/ 29 апреля 2020

В моем 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 он использует хранилище объектов, но этот код создает поток вывода. Может ли кто-нибудь помочь мне с кодом. Заранее спасибо

...