더북(TheBook)

5.2 DataFrame을 넘어 Dataset으로

 

스파크 버전 1.6.0에서 실험적인 기능으로 소개한 Dataset은 스파크 버전 2.0에 이르러 스파크의 중추적인 구성 요소로 발전했다. Dataset의 핵심 아이디어는 “사용자에게 도메인 객체(domain object)14에 대한 변환 연산을 손쉽게 표현할 수 있는 API를 지원함과 동시에, 스파크 SQL 실행 엔진의 빠른 성능과 높은 안정성을 제공하는 것”(https://goo.gl/PqKDu8)이다. 다시 말해 일반 자바 객체를 Dataset에 저장할 수 있고, 스파크 SQL의 텅스텐 엔진과 카탈리스트 최적화를 활용할 수 있다는 의미다.

Dataset과 RDD는 중복된 기능을 제공하기 때문에 서로 경쟁 관계라고도 볼 수 있다. 한때 스파크 커뮤니티에서는 RDD API에 새로운 기능과 최적화 엔진을 추가하는 것을 검토한 적이 있다. 하지만 이러한 변화는 API를 혼란스럽게 할 수 있고 변경해야 할 기존 애플리케이션이 너무 많아서 추가하지 않기로 결정했다.

스파크 버전 2.0에서는 DataFrameRow 객체로 구성된 Dataset(즉, Dataset[Row])으로 구현했다. 또 DataFrameas 메서드를 사용해 DataFrameDataset으로 변환할 수 있다.

as 메서드 시그니처

def as[U : Encoder]: Dataset[U]

 

14 역주 도메인 객체는 문제 도메인에 딱 맞는 데이터를 정의한 커스텀 객체다. 데이터 전송 객체(Data Transfer Object, DTO)와 유사하다고 볼 수도 있겠지만, 단순히 데이터만 저장하는 DTO와 달리 도메인 객체는 데이터를 처리하는 로직도 포함하는 개념이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.