[Spark] 데이터 정렬과 그루핑

Woong·2021년 12월 20일
0

Apache Spark

목록 보기
7/22

데이터 정렬

repartitionAndSortWithinPartition (생략)

sortByKey, sortBy

  • key 혹은 원하는 튜플 요소로 정렬 수행
    • 당연히 타입이 정렬 가능한 클래스여야함.
    • 커스텀 클래스일 경우 Ordered trait 또는 Ordering trait 을 이용하여 정렬 가능한 클래스 정의

groupByKeyAndSortValues

  • key를 그루핑하고 value를 정렬함.
  • 단, 메모리 및 네트워크 리소스를 많이 사용함
    • groupByKey 연산도 비효율적임 참조

top(n), takeOrdered(n)

  • 상/하위 정렬된 요소 n개 가져오기 ★
    • key가 아니라 (K, V) 튜플을 기준으로 요소 정렬.
    • 전체 데이터를 한번에 정렬하는 것이 아니라 각 파티션 내에서 정렬 후 n개만 모아서 전체 병합
      • -> 네트워크 전송량이 적고, sortBy나 take 보다 빠름.
      • 단, 파티션별로 n개를 드라이버로 다 가져오므로 메모리 주의

데이터 그루핑

groupBy, GropByKey, aggregateByKey

  • groupBy는 일반 RDD에도 사용 가능

    • 일반 RDD를 Pair RDD로 변환 후 groupByKey 호출하는 것과 동일한 결과
  • groupByKey 는 각 key의 모든 value 를 메모리로 가져옴 -> 메모리 주의.

    • key 별 평균 계산 등 모든 값을 전부 그루핑할 필요가 없다면 aggregateByKey 나 reduceByKey, foldByKey 사용하는 것이 좋음
  • groupBy 에 대해 비교한 글 참조 :
    링크텍스트
    링크텍스트

  • ※ reduceByKey, foldByKey 도 그루핑 연산자

0개의 댓글