에 PCollection의 임의의 첫번째 N 값을 얻는다. 그러나 내가 관심있는 부분은 LIMIT 1000
입니다. 이후로 나는 모든 결과를 합치는 것이 아니라 그 중 1000 개만을 필요로하기 때문에. 이 유스 케이스를 활용하여 작업 속도를 높일 수 있는지 궁금하다. (매우 광대 한 테이블 사이에 조인이 있다고 가정하고 완전히 조인하면 매우 큰 결과를 산출 할 것이다)내가 구글 데이터 흐름 내가 데이터 흐름에 가입 할 수있는 매우 표준 프로그래밍 패러다임을 가지고 있음을 알 수 <pre><code>SELECT * FROM A INNER JOIN B ON A.a = B.b **LIMIT 1000** </code></pre> <p>SQL</p> 등으로 동일합니다 뭔가를 할 수 있는지 궁금 구글의 흐름
그래서 나는 매우 순진한 방법으로 다음과 같이 SQL 결과 위의 몇 가지 템플릿 코드는 다음과 같습니다
PCollection A = ...
PCollection B = ...
PCollection result = KeyedPCollectionTuple.of(ATag, A).and(BTag, B)
.apply(CoGroupByKey.create())
.apply(ParDo.of(new DoFn<KV<...,CoGbkResult>, ...>() {
})
.apply(Sample.any(1000))
내 관심사는 ParDo
와 접선이 Sample
변환 방법 내부 흐름에 의해 처리한다는 것입니다 그러나. 데이터 흐름은 출력이 확실히 충분하다는 것을 알고있는 한 처리 결합을 중단하는 방식으로 최적화 할 수 있습니까? 아니면 단순히 데이터 흐름이 전체 조인 결과를 계산 한 다음 결과에서 1000을 선택하는이 사용 사례에서는 최적화가 없습니다. (이런 식으로 Sample
변환은 오버 헤드 일뿐입니다.)
짧은 질문으로,이 유스 케이스를 활용하여 데이터 흐름에서 부분 결합을 수행 할 수 있습니까?
편집 : 또는 본질적으로 궁금한 점은 Sample.any()
변환이 업스트림 PCollection에 대한 최적화를 알 수 있습니까? 예를 들어 내가 먼저 부하에게있는 모든 데이터를 데이터 흐름 다음 N를 선택하거나 할 수 Sample.any()
을 활용하고 몇 가지 최적화를하고 몇 가지 쓸모없는 읽기를 가지 치기 할 것이다 것
pipeline.apply(TextTO.Read.from("gs://path/to/my/file*"))
.apply(Sample.any(N))
을합니다.
'Sample.any'의 문서는 특히 병렬로 실행되지 않는다고 말합니다. 따라서 1000 행을 얻기 위해 얼마나 많은'PCollection' 파편이 처리되어야 하는지를 추정하고, 실제로 행이 1000 개가 될 때까지 더 많은 샤드를 통해 순차적으로 계속 진행합니다. – Gene