본문 바로가기

Spark

SPARK - RDD, Dataframe, Dataset

Spark - 분산처리에 특화되어 있으며 Hadoop과 달리 인메모리 형식(HDD X / RAM O)

 

RDD(Resilient Distributed Dataset)

Spark의 분산된 데이터에 대한 자료구조

MapReduce 작업을 위한 자료구조

병렬처리

빠른 연산

Immutable

변경되지 않으며 변경을 원할 시 다른 RDD를 생성해야한다.

Transformation과 Action으로 함수가 나뉜다.

Transformation은 Lineage를 통해 기록해두고 Action에서 이를 전부 실행한다.(Lazy Evaluation)

Dataset에 비해 캐싱 처리시 메모리 사용량이 많다.

자바직렬화를 사용하기 때문에 데이터프레임처럼 스파크의 스키마를 관리하고 노드 간 데이터를 전달하는 것보다 비효율적이다.

최적화를 직접 해줘야한다.

 

 

Dataset

RDD와 유사하나 데이터프레임처럼 스키마를 가진다.

JVM을 사용하는 언어인 JAVA와 SCALA에서 사용 가능하다.

Immutable

Dataframe과 달리 명시적으로 컬럼의 데이터 타입을 직접 지정할 수 있다.

타입 안정성(type-safe)이 필요한 경우에 이용 : 명시적으로 타입을 지정할 수 있으며 컴파일 시에 타입을 체크한다. 결과도 타입을 지정가능하기 때문에 타입 세이프하다. 

type-safe와 optimization은 trade off 관계에 있다.

 

 

Dataframe

Dataframe = Dataset을 배열(Row)로 표시

판다스의 데이터프레임과 유사하다.

Immutable

스키마를 가진다. 

노드 간 데이터 전달할 때 더욱 효율적이다.

Dataset에 비해 추상화된 High-level api

스파크 연산에 있어 가장 우수한 성능을 보인다.