2016-08-03 3 views
1

현재 Apache Spark 및 Apache Flink에서 일부 알고리즘을 구현하려고합니다. 알고리즘을 실행할 때, 나는 어떤 종류의 차 집합/차감 연산을해야만한다.Apache Flink DataSet 차이/빼기 작업

Apache Spark에 대해 subtract 조작이 내장되어 있지만 Apache Flink (1.0.3 및 1.1.0-SNAPSHOT)에서 비슷한 것을 찾을 수 없습니다.

그래서 제 질문은, 즉 d1\d2d1, d2 모두 동일한 유형 T 설정의 차이를 적용 할 수있는 가장 효율적인 방법이 무엇인가를 포함하는 객체 두 데이터 집합 주어진?

val d1: DataSet[T] = ... 
val d2: DataSet[T] = ... 
val d_diff: DataSet[T] = ??? 

아마 coGroup

val d_diff = d1.coGroup(d2).where(0).equalTo(0) { 
       (l, r, out: Collector[T]) => { 
       val rightElements = r.toSet 
       for (el <- l) 
        if (!rightElements.contains(el)) out.collect(el) 
       } 
      } 

을 통해 몇 가지 방법이 있지만, 그게 정확하고 모범 사례 나 사람이 좀 더 효율적으로 알고 않는지 궁금하네요?

답변

2

DataSet API는 아주 기본적인 작업 집합 만 포함하므로 메서드를 제공하지 않습니다. 1.1의 Table API에는 빼기 연산자 세트가 있습니다. 구현 방법을 알 수 있습니다 here.

leftDataSet 
    .coGroup(rightDataSet) 
    .where("*") 
    .equalTo("*") 
    .`with`(coGroupFunction) 

this CoGroupFunction을 사용합니다. 그래서 네, 맞습니다.

관련 문제