더북(TheBook)

5.1.1.1 SparkSession을 생성하고 암시적 메서드 임포트

스파크 DataFrame과 SQL 표현식을 사용하려면 먼저 SparkSession 객체를 준비해야 한다. 스파크 셸은 SparkSessionspark라는 이름의 변수로 제공한다. 반면 스파크 독립형 프로그램을 직접 작성할 때는 다음과 같이 SparkSession 객체를 손수 생성해야 한다.

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().getOrCreate()

 

SparkSessionSparkContextSQLContext를 통합한 래퍼(wrapper) 클래스다(스파크 버전 2.0 이전에는 SQLContext를 사용해 DataFrame을 생성했다). builder()가 반환하는 Builder 객체는 스파크 마스터 및 appName, 그리고 기타 여러 옵션을 설정한다. 하지만 예제에서는 기본 값을 그대로 사용해도 충분하다.

스파크는 RDD를 DataFrame으로 자동 변환하는 데 필요한 암시적 스칼라 메서드들을 제공한다. 이 메서드들을 사용하려면 먼저 import로 가져와야 한다. spark라는 변수 이름으로 SparkSession 객체를 생성했다면 다음과 같이 메서드를 임포트할 수 있다.

import spark.implicits._

 

스파크 셸을 시작하면 이 코드를 자동으로 실행하지만, 스파크 독립형 프로그램을 작성할 때는 직접 실행해야 한다.

SparkSessionimplicits 객체는 Dataset Encoder가 정의된 객체로 구성한 RDD에 toDF라는 메서드를 추가한다. Encoder는 스파크 SQL이 내부적으로 JVM 객체를 테이블 형식으로 변환하는 데 사용하는 트레잇이다.1 DataFrame 구성에 사용할 수 있는 기본 Encoder 목록은 스칼라 API 문서(http://mng.bz/Wa45)에서 볼 수 있다. 이제 예제로 Encoder가 어떻게 동작하는지 알아보자.

 

1 역주 스파크의 Encoder는 하이브의 SerDe 라이브러리와 유사하며, 자바 직렬화나 Kryo 직렬화보다 월등히 빠른 직렬화 성능을 자랑한다. 자세한 내용은 데이터브릭스의 자료(https://goo.gl/UqDsjE)를 참고하자.

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