2016-08-17 2 views
-2

У меня есть архив _2016_08_17.zip который содержит 8 .tsv файлов. Мне нужно извлечь файл с именем hit_data.tsv и загрузить его в bigquery. Файлы находятся в ведре на облачной платформе Google.Получить .tsv файл из архива в java без разархивирования архива

Может кто-нибудь дать мне простую программу, которая открывает архив, находит правильный файл и затем печатает его строки на экране. Я могу взять это оттуда. Моя идея - заменить путь gs://path_name/*hit_data.tsv буфером, который содержит данные hit_data.tsv.

public static void main(String[] args) { 
    Pipeline p = DataflowUtils.createFromArgs(args); 

    p 
      .apply(TextIO.Read.from("gs://path_name/*hit_data.tsv")) 
      \\.apply(Sample.<String>any(10)) 
      .apply(ParDo.named("ExtractRows").of(new ExtractRows('\t', "InformationDateID"))) 
      .apply(BigQueryIO.Write 
        .named("BQWrite") 
        .to(BigQuery.getTableReference("ddm_now_apps", true)) 
        .withSchema(getSchema()) 
        .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) 
        .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)); 

    p.run(); 
} 

ответ

0

По определению вы не можете прочитать файл из архива ZIP без его разархивирования.

+0

Возможно, но я не хочу получить доступ к жесткому диску больше, чем мне нужно. Я могу получить доступ к файлу без сохранения распакованного файла на жестком диске. –

+0

уверен, но это не то, что вы просили - вы должны уточнить свой вопрос, чтобы уточнить – GreyBeardedGeek

+0

Я попытался спросить его так, как это имеет смысл. Я думаю, вы знаете, что я имею в виду. –

0

У нас есть ZipFile класс. Он имеет метод entries, который возвращает перечисление записей. Теперь мы можем найти запись или использовать метод getEntry, если мы знаем имя и путь к файлу в zip.

Затем, последний шаг, мы можем использовать метод getInputStream, чтобы читать только запись, которую мы хотим.

Смежные вопросы