복합 변환 생성

Dataflow SDK의 변환은 여러 간단한 변환을 하나의 복잡한 변환으로 구성할 수 있는 중첩 구조를 가질 수 있습니다. 하나의 변환은 여러 다른 변환 작업으로 구성될 수 있습니다(즉, ParDo, Combine 또는 GroupByKey 작업을 하나 이상 수행 가능). 이러한 변환을 복합 변환이라고 합니다. 복합 변환은 여러 단계로 구성된 재사용 가능한 변환을 생성하려는 경우에 유용합니다.

단일 복합 변환 안에 여러 개의 변환을 중첩하면 Dataflow 파이프라인에 여러 가지 이점을 제공할 수 있습니다.

  • 복합 변환을 사용하면 코드가 모듈화되고 이해하기 쉬워지기 때문에 코드 재사용을 촉진할 수 있습니다.
  • Dataflow 모니터링 인터페이스가 복합 변환을 이름별로 참조하므로 런타임에서 파이프라인의 진행 상황을 더 쉽게 추적하고 파악할 수 있습니다.

복합 변환의 예시

Dataflow SDK에서 미리 작성된 변환 중 다수는 복합 변환입니다.

Dataflow SDK WordCount 예 프로그램CountWords 변환은 복합 변환의 예입니다. CountWords는 여러 개의 중첩된 변환으로 구성된 PTransform 하위 클래스입니다.

apply 메소드에서 CountWords 변환은 다음 변환 작업을 적용합니다.

  1. ParDo를 텍스트 줄의 입력 PCollection에 적용하여 개별 단어의 출력 PCollection을 생성합니다.
  2. Dataflow SDK 라이브러리 변환 Count*를 단어의 PCollection에 적용하여 키/값 쌍의 PCollection을 생성합니다. 각 키는 텍스트에서 단어를 나타내며, 각 값은 원래 데이터에서 해당 단어가 등장하는 횟수를 나타냅니다.
  3. 최종 ParDo를 키/값 쌍의 PCollection에 적용하여 출력 파일에 쓰기 적합한 인쇄 가능한 문자열의 PCollection을 생성합니다.

그림 1은 CountWords를 포함한 파이프라인이 복합 변환을 사용하여 어떻게 구조화되는지를 보여주는 다이어그램입니다.

CountWords 변환은 두 개의 ParDo 연산을 사용하고 Count라는 SDK 제공 변환을 사용하는 복합 변환입니다.
그림 1: 복합 CountWords 변환의 분석

자바

복합 변환의 매개변수 및 반환 값은 전체 변환의 초기 입력 유형 및 최종 반환 유형과 일치해야 합니다. 예를 들어 CountWords.apply는 변환의 중간 데이터가 여러 차례 유형을 변경하는 경우에도 입력 PCollection<String>을 적용하고 PCollection<String>을 반환합니다.

  static class CountWords
      extends PTransform<PCollection<String>, PCollection<String>> {
    @Override
    public PCollection<String> apply(PCollection<String> lines) {
      PCollection<String> words = lines.apply(
          ParDo
          .named("ExtractWords")
          .of(new ExtractWordsFn()));

      PCollection<KV<String, Integer>> wordCounts =
          words.apply(Count.<String>perElement());

      PCollection<String> results = wordCounts.apply(
          ParDo
          .named("FormatCounts")
          .of(new DoFn<KV<String, Integer>, String>() {
              @Override
              public void processElement(ProcessContext c) {
                c.output(c.element().getKey() + ": " + c.element().getValue());
              }
            }));

      return results;
    }
  }

복합 변환 생성

Dataflow SDK에서 Ptransform 클래스의 하위 클래스를 생성하고 실제 처리 논리를 지정하도록 apply 메소드를 재정의함으로써 복합 변환을 직접 생성할 수 있습니다. 그런 다음 SDK에서 내장된 변환을 사용하는 것처럼 이 변환을 사용할 수 있습니다.

자바

PTransform 클래스 유형 매개변수의 경우, 변환이 입력으로 적용하고 출력으로 생성하는 PCollection 유형을 전달합니다. 여러 개의 PCollection을 입력으로 적용하거나 여러 개의 PCollection을 출력으로 생성하려면 관련 type 매개변수에 대해 다중 컬렉션 유형 중 하나를 사용하세요.

다음 코드 샘플은 입력에 String 타입의 PCollection을 적용하고 Integer 타입의 PCollection을 출력하는 PTransform을 선언하는 방법을 보여줍니다.

  static class ComputeWordLengths
    extends PTransform<PCollection<String>, PCollection<Integer>> {
    ...
  }

Apply 메소드 재정의

PTransform 하위 클래스 내에서 apply 메소드를 재정의해야 합니다. applyPTransform의 처리 논리를 추가하는 곳입니다. apply 재정의를 위해서는 적절한 유형의 입력 PCollection을 매개변수로 적용하고 출력 PCollection을 반환값으로 지정해야 합니다.

자바

다음 코드 샘플은 이전 예시에서 선언된 ComputeWordLengths 클래스의 apply를 재정의하는 방법을 보여줍니다.

  static class ComputeWordLengths
      extends PTransform<PCollection<String>, PCollection<Integer>> {
    @Override
    public PCollection<Integer> apply(PCollection<String>) {
      ...
      // transform logic goes here
      ...
    }

PTransform 하위 클래스에 있는 apply 메소드에 적절한 입력 PCollection을 적용하고 해당 출력 PCollection을 반환하도록 재정의하는 조건에 한하여 변환을 원하는 만큼 포함할 수 있습니다. 이러한 변환에는 코어 변환, 복합 변환, Dataflow SDK의 라이브러리에 있는 변환이 포함될 수 있습니다.

자바

PTransformapply 메소드는 변환 사용자가 직접 호출하기 위한 것이 아닙니다. 대신 PCollection 자체에서 변환을 인수로 사용하여 apply 메소드를 호출해야 합니다. 그러면 파이프라인 구조 안에 변환을 중첩할 수 있습니다.

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

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

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