2016-08-17 67 views
-2

我有一个包含8个.tsv文件的档案_2016_08_17.zip。我需要提取名为hit_data.tsv的文件并将其上传到bigquery。这些文件位于谷歌云平台上。从java中的档案中获取.tsv文件而不解压档案

有人可以给我一个简单的程序,打开存档,找到正确的文件,然后打印其行到屏幕上。我可以从那里拿走它。我的想法是用包含hit_data.tsv数据的缓冲区替换路径gs://path_name/*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类。它有​​方法返回条目的枚举。现在我们可以找到条目或使用getEntry方法,如果我们知道文件的名称和路径在zip中。

然后,最后一步,我们可以使用getInputStream方法来只读取我们想要的条目。