2016-08-17 3 views
-2

8 개의 .tsv 파일을 포함하는 _2016_08_17.zip 파일이 있습니다. hit_data.tsv이라는 파일의 압축을 풀고 bigquery에 업로드해야합니다. 파일은 Google 클라우드 플랫폼의 버킷에 있습니다.아카이브의 압축을 풀지 않고 java의 아카이브에서 .tsv 파일 가져 오기

누군가 내게 아카이브를 열고 올바른 파일을 찾은 다음 행을 화면에 인쇄하는 간단한 프로그램을 제공 할 수 있습니까? 나는 거기에서 그것을 가져갈 수있다. 내 생각은 경로 gs://path_name/*hit_data.tsvhit_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

정의에 따르면 압축을 풀지 않은 채로 파일을 읽을 수는 없습니다.

+0

아마,하지만 필자는 필요한 것보다 더 많은 하드 드라이브에 액세스하고 싶지 않습니다. 압축을 푼 파일을 하드 드라이브에 저장하지 않고 파일에 액세스 할 수 있습니다. –

+0

확실하지만 그 질문은 아닙니다. 명확하게 질문을 업데이트해야합니다. – GreyBeardedGeek

+0

가장 의미있는 방식으로 질문하려고했습니다. 나는 네가 내 말 뜻을 알 것 같아. –

0

우리는 ZipFile 클래스를 가지고 있습니다. 그것은 항목의 열거를 반환하는 entries 메서드가 있습니다. 이제는 zip 파일 이름과 경로를 알면 항목을 찾거나 getEntry 메서드를 사용할 수 있습니다.

그런 다음 마지막 단계에서 getInputStream 메서드를 사용하여 원하는 항목 만 읽을 수 있습니다.

관련 문제