2015-01-01 3 views
1

압축 파일의 입력 데이터를 읽는 방법 (또는 모든 종류의 해킹)이 있습니까? 내 입력은 수백 개의 파일로 구성되며 gzip으로 압축 된 형태로 생성되며 압축되지 않은 파일은 다소 지루합니다.데이터 흐름의 압축 파일에서 읽기

덕분에, Genady

답변

1

는 또한 콘텐츠 유형 및 콘텐츠 인코딩을 설정 클라우드 저장소에있는 파일에 대한 해결 방법이 필요없이 "그냥 작동"으로 표시되는 것을 발견했다.

은 특히 - 나는 그들이 병렬로 처리되지 않는 한, 그래서 데이터 흐름이 같은 분할에있는 파일의 대부분을 가하고 있었기 때문에 주위 대부분이었다 내 작품에

gsutil -m setmeta -h "Content-Encoding:gzip" -h "Content-Type:text/plain" <path> 
+0

파일을 작업 단위로 분할하는 논리를 방해 할 수 있으므로 걱정이됩니다. 다른 스레드에서 생각해 보면 작은 파일이 여러 장있어 어떤 이유에서 작동하는지 알 수 있습니다. 나는 이것이 좋은 해결책이라고 생각하지 않는다. 우리는 지금 당장 그것에 대해 연구 중입니다. – Frances

+0

가장 큰 파일은 압축시 약 7MB, 압축되지 않은 경우 약 60MB입니다. –

+0

네가 가진 파일의 수를 감안할 때, 우리는 그 파일들을 나누려고하지 않을 것입니다. (당신이 나에게 일 ID를 보내면 확인할 수 있습니다.) – Frances

3

느린 성능을 실행합니다. 속도를 높이려면 다음을 시도해보십시오.

  • 만들기 변환을 여러 번 (매번 단일 파일에 적용)하여 각 파일에 대한 PCollection을 만듭니다.
  • Flatten 변환을 사용하여 개별 파일을 나타내는 PCollections의 모든 파일을 포함하는 단일 PCollection을 만듭니다.
  • 이 PCollection에 파이프 라인을 적용하십시오.
5

압축 된 텍스트 소스에서의 읽기가 이제 데이터 흐름 (this commit 현재)에서 지원됩니다. 파일이에 .gz 또는 .bz2로 확장이있는 경우, 당신은 아무것도 할 필요가 없습니다, 그러나

TextIO.Read.from(myFileName).withCompressionType(TextIO.CompressionType.GZIP) 

: 특히, gzip을하고 레스 햇의 bzip2으로 압축 된 파일은 압축 유형을 지정하여 읽을 수있는 기본 압축 유형은 파일 확장자를 검사하여 파일에 대해 올바른 압축 유형을 결정하는 AUTO입니다. 이것은 심지어 글로브에서 작동합니다. glob에서 생성 된 파일은 .gz, .bz2 및 압축되지 않은 파일이 혼합되어있을 수 있습니다.

+0

감사합니다. 메타 데이터 헤더와 어떻게 상호 작용합니까? 모든 파일을 바이너리로 설정해야합니까 아니면 텍스트/일반 파일로 유지할 수 있습니까? –

+0

Content-Encoding 헤더에는 문제가 있지만 Content-Type 헤더에는 문제가있는 것처럼 보입니다. Content-Encoding 헤더를 지우면 읽기가 성공합니다.'gsutil -m setmeta -h "Content-Encoding :" " – MattL

+0

압축을 지정하지 않고도 아직 작동하지 않는 것 같습니다. 새 SDK를 기다려야합니까, 아니면 이미 작동해야합니까? –

1

압축 유형 지정이 최신 SDK 버전 (v0.3.150210)에서 가능하다는 사실을 알게되었습니다. 나는 그것을 테스트했고 GCS에서 BQ로 내 GZ 파일을 아무런 문제없이 직접로드 할 수있었습니다.