Avro I/O

기본 제공되는 Avro 파일용 ReadWrite 변환은 AvroIO에 포함되어 있습니다. AvroIO를 사용하여 로컬 파일(자바 프로그램이 실행되는 시스템에 있는 파일)과 Google Cloud Storage의 원격 파일을 모두 읽거나 쓸 수 있습니다.

자바

참고: 파이프라인이 로컬 파일을 읽거나 쓰게 하려면 DirectPipelineRunner를 사용하여 파이프라인을 로컬로 실행해야 합니다. 이는 Dataflow 서비스가 파이프라인을 실행하는 데 사용하는 Google Compute Engine 인스턴스가 읽기 및 쓰기를 위해 로컬 머신의 파일에 액세스할 수 없기 때문입니다.

Avro 스키마 지정

AvroIO를 사용하려면 읽거나 쓸 레코드를 설명하는 Avro 스키마를 지정해야 합니다. Avro는 스키마를 사용하여 데이터를 직렬화하는 방법을 설명합니다. Avro 문서를 참조하여 Avro 스키마 작동 방법을 알아보세요.

Avro 생성 클래스 유형을 제공하여 특정 종류의 Avro 레코드를 읽거나 GenericRecords를 읽기 위해 org.apache.avro.Schema 객체를 제공할 수 있습니다. 일반적으로 스키마 파일(.avsc)에서 Schema 객체를 읽습니다. 또한 JSON 인코딩된 문자열 형식으로 Schema를 지정할 수 있습니다.

스키마를 제공하려면 .withSchema 메소드를 AvroIO 변환과 함께 사용합니다. AvroIO.Read 또는 AvroIO.Write를 사용할 때마다 .withSchema를 호출해야 합니다.

AvroIO로 읽기

AvroIO.Read 변환은 Avro 파일 한 개 이상에서 레코드를 읽고 각 요소가 레코드를 나타내는 PCollection 을 만듭니다. AvroIO.Read는 자동 생성된 Avro 클래스 객체 또는 GenericRecord 객체의 PCollection을 생성할 수 있습니다. 생성되는 PCollection 종류는 선택한 스키마 유형에 따라 다릅니다.

자동 생성된 Avro 클래스를 사용하면 다음과 같이 요소가 해당 Avro 클래스 유형의 객체인 PCollection이 됩니다.

자바

  PipelineOptions options = PipelineOptionsFactory.create();
  Pipeline p = Pipeline.create(options);

  PCollection<AvroAutoGenClass> records = p.apply(
    AvroIO.Read.named("ReadFromAvro")
          .from("gs://some/inputData.avro")
          .withSchema(AvroAutoGenClass.class));

Avro 파일을 PCollection<GenericRecord>로 읽으려면 org.apache.avro.Schema 객체 또는 JSON 인코딩된 문자열로 작성된 스키마를 전달하면 됩니다. 다음 코드 샘플은 org.apache.avro..avsc 파일을 파싱하여 Schema 객체를 가져온 후 결과 Schema를 사용하여 Google Cloud Storage에서 분할된 입력 Avro 파일을 읽습니다.

자바

  PipelineOptions options = PipelineOptionsFactory.create();
  Pipeline p = Pipeline.create(options);

  Schema schema = new Schema.Parser().parse(new File("schema.avsc"));

  PCollection<GenericRecord> records =
    p.apply(AvroIO.Read.named("ReadFromAvro")
                       .from("gs://my_bucket/path/records-*.avro")
                       .withSchema(schema));

다른 파일 기반 Dataflow 소스와 마찬가지로, AvroIO.Read 변환은 입력 파일을 여러 개 읽을 수 있습니다. 파일 기반 소스를 읽을 때 여러 파일을 처리하는 방법에 대한 자세한 내용은 입력 데이터 읽기를 참조하세요.

AvroIO로 쓰기

AvroIO.Write 변환은 Avro 레코드의 PCollection을 한 개 이상의 Avro 파일에 씁니다. AvroIO.Write를 사용하려면 자동 생성된 Avro 클래스 객체의 PCollection이나 GenericRecordsPCollection 중 하나로 최종 출력 데이터를 나타내야 합니다. ParDo를 사용하여 데이터를 적절하게 변환할 수 있습니다.

특정 레코드를 작성하려면 자동 생성된 Avro 클래스를 Avro 스키마로 사용합니다.

자바

  PCollection<AvroAutoGenClass> filteredRecords = ...;
  filteredRecords.apply(AvroIO.Write.named("WriteToAvro")
                                    .to("gs://some/outputData.avro")
                                    .withSchema(AvroAutoGenClass.class)
                                    .withSuffix(".avro"));

GenericRecord 객체를 쓰려면 org.apache.avro.Schema(종종 .avsc 파일을 파싱하여) 또는 JSON 인코딩된 문자열로 작성된 스키마를 전달하면 됩니다. 다음 코드 샘플은 .avsc 파일을 파싱하여 Schema 객체를 얻고 이를 사용하여 분할된 출력 Avro 파일을 Google Cloud Storage에 씁니다.

자바

  Schema schema = new Schema.Parser().parse(new File("schema.avsc"));

  PCollection<GenericRecord> records = ...;
  records.apply(AvroIO.Write.named("WriteToAvro")
                            .to("gs://my_bucket/path/numbers")
                            .withSchema(schema)
                            .withSuffix(".avro"));

AvroIO.Write는 기본적으로 여러 출력 파일에 씁니다. 자세한 내용은 출력 데이터 쓰기를 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.