본 챕터에서는 2장에서 다루지 않은 API와 스파크가 제공하는 여러 라이브러리, 기능을 소개한다.
Spark-submit을 활용하면 대화형 shell에서 개발한 프로그램을 운영용 어플리케이션으로 전환할 수 있다. Spark-submit명령은 어플리케이션 코드를 클러스터에 전송해 실행시키는 역할을 수행한다. 전송된 어플리케이션은 종료되거나 에러가 발생할 때까지 실행된다. Spark-submit 실행시 옵션 지정을 통해 필요한 자원과 실행 방식을 지정할 수도 있다.
Dataset은 정적 타입 코드(자바, 스칼르, C, C++등)를 지원하기 위해 고안된 구조적 API이다. 동적 타입 언어인 파이썬과 R에서는 사용이 불가능하다. Dataset API는 DataFrame의 레코드를 클래스에 할당하여 고정 타입형 컬렉션(자바 : ArrayList, 스칼라 : Seq)으로 다룰 수 있는 기능을 제공한다. 타입 안정성을 지원하기 때문에 초기화에 사용한 클래스 대신 다른 클래스가 접근할 수 없다.
Dataset의 장점으로는 우선 필요한 경우에 선택적으로 사용할 수 있다는 점이다. 또한 스파크에서 제공하는 여러 함수를 이용해 추가 처리 작업을 할 수 있는데, 타입 안정성을 보장하는 코드에서 저수준 API와 고수준 API를 이용해 빠른 분석을 가능하게 한다. collect, take 메소드를 이용해 호출할 때 DataFrame의 Row타입으로 반환하는게 아니라 Dataset에 매개변수로 지정한 타입의 객체를 반환하여 타입 안정성을 보장한다.
구조적 스트리밍은 스트림 처리용 고수준 API이다. 구조적 스트리밍을 통해 구조적 API로 개발된 배치모드의 연산을 스트리밍 방식으로 실행할 수 있으며, 지연 시간을 줄이고 증분 처리가 가능하다. 배치 처리용 코드를 수정하여 스트리밍 처리로 수행하고 빠른 결과값을 기대할 수 있다.
스파크는 내장 머신러닝 알고리즘 라이브러리인 MLlib를 제공하는데, 이를 활용하여 대용량 데이터의 전처리, 멍잉, 모델 학습, 예측을 수행할 수 있다. 모델 학습 과정에서 분류, 회귀, 군집화, 딥러닝까지 머신러닝 관련 API를 제공한다.
스파크는 RDD를 통해 자바와 파이썬 객체를 다루는데 필요한 다양한 기본 기능을 제공하고, 거의 모든 기능이 RDD를 기반으로 만들어졌다. 원시 데이터를 읽을 때 구조적 API를 사용하지 않고 RDD를 사용하는 이유는 파티션과 같은 특성을 보다 더 세밀하게 조절할 수 있기 때문이다. 언어에 관계 없이 동일한 실행 특성을 보이는 DataFrame과 달리 RDD는 세부 구현 방식에서 차이가 있다.
** RDD의 간단한 설명은 스파크 내부의 저장된 데이터이며 변경 불가능한 특성을 가진다고 한다.
SparkR은 스파크를 R 언어로 사용하기 위한 기능이다. 파이썬 대신 R을 사용한다는 차이점만 존재할 뿐 기능적인 측면에서는 모두 같다.