ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스파크 완벽 가이드] Chapter 11 - Dataset
    Dev/Spark 2020. 11. 15. 04:44

    * 해당 포스트는 "스파크 완벽 가이드" 책을 읽고 난 이후의 정리 내용입니다.

      자세한 내용은 "스파크 완벽 가이드" 책을 통해 확인해주세요.

     

    Dataset?

    Dataset: 구조적 API의 기본 데이터 타입, Scala와 Java에서만 사용 가능

    Dataframe: Dataset[Row]

     

    11.1 Dataset을 사용할 시기

    • DataFrame 기능만으로는 수행할 연산을 표현할 수 없을 때

    복잡한 비즈니스 로직을 SQL이나 DataFrame 대신 단일 함수로 인코딩해야 하는 경우

    • 성능 저하를 감수하면서 타입 안정성(type-safe)을 가진 데이터 타입을 사용하고 싶을 때

    사용할 Function과 대상 Object의 데이터 타입이 맞지 않는 경우 처럼 데이터 타입이 유효하지 않은 작업을 수행하지 못하도록 방어적 코드, 정확도 높은 프로그램 개발을 위해 Dataset을 사용하는 것이 좋은 선택일 수 있다.

    • 단일 노드의 워크로드와 스파크 워크로드에서 전체 로우에 대한 다양한 트랜스포메이션을 재사용해야 하는 경우

    케이스 클래스로 구현된 데이터 타입을 사용해 모든 데이터와 트랜스포메이션을 정의해 재사용

    DataFrame과 Dataset을 동시에 사용하는 경우도 다수 존재.

    (ETL 트랜스포메이션의 마지막, 혹은 첫 단계에서 변환 사용을 하는 경우도 있음)

    11.2 Dataset 생성

    정의할 스키마에 대한 이해 필요

     

    11.2.1 자바: Encoders

    데이터 타입 클래스 정의 -> DataFrame(Dataset<Row>)에 지정

    11.2.2 스칼라: 케이스 클래스

    케이스 클래스: 아래의 특징을 지니는 정규 클래스

    • 불변성
    • 패턴 매칭으로 분해 가능
    • 참조값 대신 클래스 구조를 기반으로 비교
    • 사용하기 쉽고 다루기 편함

    스칼라 문서에서의 설명

    • 불변성, 객체의 변경에 대한 추적 필요 X
    • 값으로 비교하면 인스턴스를 마치 원시(primitive) 데이터 타입의 값처럼 비교. 그렇기에 클래스 인스턴스가 값으로 비교되는지 참조로 비교되는지 불확실해하지 않아도 된다.
    • 패턴 매칭은 로직 분기를 단순화해 버그를 줄이고 가독성을 좋게 만든다.

    11.3 액션

    write, show 외에도 collect, take, count 등의 액션을 사용할 수 있음

    case class에 이미 데이터 타입을 다 정의했기 때문에 실제 접근 시 어떠한 데이터 타입도 필요하지 않음.

    11.4 트랜스포메이션

    DataFrame의 모든 트랜스포메이션은 Dataset에서도 사용 가능

     

    11.4.1 필터링

    TIP: 단순 필터일 경우 SQL 표현식을 사용하는 것이 필터링에 대한 자원 사용 비용을 줄일 수 있음.

    해당 작업의 경우 originIsDestination이라는 함수를 선언해 filter에서 해당 함수를 사용함.

    데이터의 크기가 그리 크지 않아 단일 머신에서도 처리 가능하다면 스칼라 함수로의 사용도 가능함.

     

    11.4.2 매핑

    특정 Column 추출 등에 사용함(SELECT) 

    11.5 조인

    DataFrame과 동일하게 적용 + joinWith와 같은 Method 사용 가능.

    joinWith: 내부적으로 두개의 Dataset을 가지고 있는 형태로 Join을 수행하는 것.

    읽어볼 자료: medium.com/datamindedbe/joining-spark-datasets-a1e356996e52

     

    Joining Spark Datasets

    Ever wanted to do better than joins on Apache Spark DataFrames? Now you can!

    medium.com

     

    11.6 그룹화와 집계

    groupby, rollup, cube 사용 가능

    RETURN TYPE: DataFrame

    Dataset으로 Return할 수 있는 방법: groupByKey 등

    Key를 기준으로 그룹화를 하는 함수

     

    댓글

Designed by Tistory.