나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Big Data/Spark

[Spark] Dataset

devidea 2020. 1. 14. 18:08

이번 글은 스파크 완벽 가이드의 내용을 대부분 발췌한 것이다.

DataSet은 구조적 API의 기본 데이터 타입이다. DataFrame은 Row 타입의 DataSet이다. (DataFrame == DataSet[Row])
도메인별 특정 객체를 효과적으로 지원하기 위해 '인코더 encoder'라 부르는 특수한 개념이 필요하다. 인코더는 도메인별 특정 객체 T를 스파크의 내부 데이터 타입으로 매핑하는 시스템을 의미한다.
DataFrame이나 '표준' 구조적 API를 사용한다면 Row 타입을 직렬화된 바이너리 구조로 변환합니다.

DataSet을 사용할 시기

  • DataFrame 기능만으로는 수행할 연산을 표현할 수 없는 경우
  • 성능 저하를 감수하더라도 타입 안정성(type-safe)을 가진 데이터 타입을 사용하고 싶은 경우

참고할 점은 자바 가상머신을 사용하는 언어인 자바와 스칼라에서만 사용할 수 있다.

 

DataSet 사용방법

1. Dataset 생성
scala (특정 case class를 가진) Seq에서 .toDS()를 호출하면 Dataset이 만들어진다.

2. RDD에서 Dataset 생성
rdd에서도 toDS()를 호출하면 Dataset이 만들어진다.

3. DataFrame에서 Dataset 생성
DataFrame은 Dataset[Row]이므로 타입 변환으로 이해해야한다. DataFrame에서 .as[T]로 특정 case class 구조를 가진 Dataset을 만들 수 있다.


관련 문서

 

반응형

'Big Data > Spark' 카테고리의 다른 글

[Spark] Direct API for Kafka (직접 모델)  (2) 2021.08.12
[spark] hadoop 3 & hive 3 환경 설정  (0) 2020.05.25
[Spark] 2.4.0 - bucket pruning  (0) 2020.03.10
[Spark] Accumulators  (0) 2019.05.03
Spark SQL  (0) 2018.11.20