[Spark] join, 집합 연산

Woong·2021년 12월 20일
0

Apache Spark

목록 보기
6/22

join

  • Pair RDD 에서만 사용 가능.
    • join
      • -> 키가 두 RDD 모두 있는 것만 Pair RDD 생성.
      • Pair RDD (K,V) 와 Pair RDD (K,W) join 하면
        • -> (K, (V, W)) RDD 생성
    • leftOuterJoin
      • 첫번째에만 있는건 (K, (V, None)) 로
        두번째 RDD에만 있는 키 요소는 제외,
    • rightOuterJoin
      • 첫번째 RDD에만 있는 키 요소는 제외,
        두번째에만 있는건 value가 (K, (None, W))로
    • fullOuterJoin
      • 두 RDD 중 하나만 있어도 저장.
        (K, (V, W)) -> 둘다 있을 때
        (K, (V, None)) -> 첫번째만 있을 때
        (K, (None, W)) -> 두번째만 있을 때

substract, substractByKey

subtract

  • RDD 요소 여집합 리턴
    • key 나 value 값만 보는게 아니라 요소 전체를 비교함
    • Pair RDD 가 아닌 일반 RDD도 사용 가능.

substractByKey

  • key-value 값 쌍 여집합 리턴
    • Pair RDD에서만 사용 가능

cogroup

  • 여러 RDD 를 각각 key 로 grouping 하고 키를 기준으로 조인.
    • 한쪽에만 있는 key인 경우 다른쪽 RDD Iterator는 비어있음. isEmpty 로 구분 가능
    • fullOuterJoin 과 유사하지만, RDD 들을 Iterator 로 리턴하므로 사용하기 편함
  • ex)

    val resultRDD = testRDD.cogroup(testRDD2, testRDD3)
    RDD[(K, (Iterable[V], Iterable[W1], Iterable[W2]))]

    • x._1 => key
    • x._2._1 : Iterable[V] (첫번째 RDD. 위의 testRDD 자리)
    • x._2._2 : Iterable[W1] (인자의 첫번째 RDD. 위의 testRDD2 자리)
    • x._2._3 : Iterable[W2] (인자의 두번째 RDD. 위의 testRDD3 자리)
      • ※ 해당 key 가 없는 경우 해당 RDD Iterator 는 비어있음.
      • x._2._3.isEmpty 와 같이 필터링 가능

intersection (RDD)

  • RDD 교집합 리턴

cartesian (RDD)

  • 두 RDD의 데카르트 곱(cartesian product) 계산
    • 즉 주 RDD의 요소로 만들 수 있는 모든 튜플 쌍 리턴.

zip, zipPartitions (생략)

  • zip : 두 RDD 요소의 쌍을 묶은 새 RDD[(T, U)] 를 리턴
    • ※ 두 RDD 의 사이즈가 다를 경우 오류 발생
  • zipPartitions

0개의 댓글