2017-12-02 12 views
1

FileBasedSink를 버전 2.0.0에서 2.2.0으로 확장하는 사용자 지정 싱크를 마이그레이션하려고합니다. 이 클래스는 변경 및 두 개의 여분의 형태 파라미터를 추가했습니다 : UserTDestinationT : 나는 FileBasedSink의 문서를 확인했지만 그것의 목적을 찾을 수 없습니다FileBasedSink의 유형 매개 변수는 무엇입니까?

@Experimental(value=FILESYSTEM) 
public abstract class FileBasedSink<UserT,DestinationT,OutputT> 
extends java.lang.Object 
implements java.io.Serializable, HasDisplayData 

합니다. 이 API는 being redesigned하고 빔의 다음 버전에서 더 이상 사용되지 않습니다 것을

* @param <OutputT> the type of values written to the sink.` 

답변

1

참고 : 모든 유형 매개 변수 만 OutputT

는 문서가 있습니다. 그러나 한편 :

  • UserT는 PCollection 요소의 유형이 기록 될합니다 - WriteFilesPCollection<UserT>에 적용됩니다 변환.
  • OutputT은 싱크의 Writer으로 직접 전달되는 낮은 수준의 레코드 유형입니다. 일부 싱크에는 "형식 기능"이 있기 때문에 UserT과 다릅니다. Avro는 모든 레코드를 GenericRecord으로 변환 할 수 있습니다. UserTDynamicDestinations.formatRecord을 통해 OutputT에 매핑됩니다.
  • DestinationT은 동시에 여러 대상에 대한 쓰기를 지원하는 논리적 유형입니다. 서로 다른 디렉토리에 서로 다른 스키마가있는 Avro 파일에 다른 유형의 이벤트 작성. DestinationT은 기록 할 레코드의 그룹화 키의 일종으로 기능하고 동일한 DestinationT이있는 레코드는 동일한 구성을 사용하여 기록됩니다. FileBasedSink.DynamicDestinations을 참조하십시오. getDestinationUserT 레코드에서 대상을 추출합니다. 다른 방법은 주어진 대상에 대한 구성을 생성합니다. DynamicAvroDestinations.getSchema.

이 API는 최적이 아닙니다. 예 : 이 고급 개념 (사용자 유형 및 대상)을 파일 형식 고유의 코드 (예 : Avro 파일 작성)에 도입합니다. 그것이 재 설계되는 이유입니다. 새로운 API를 구현하는 PR https://github.com/apache/beam/pull/3817에 대해 계속 지켜봐주십시오.

+0

설명해 주셔서 감사합니다. API의 사용자 관점에서 볼 때 사용자에게 표시되는 것이므로 최적이 아닌 경우에도 문서화되면 도움이됩니다. 재 설계가 제출 될 때까지 버전 2.0.0을 유지 하시겠습니까? –