You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Resilient Distributed Dataset (RDD)
Spark core에는 변경할 수 없는 데이터 집합인 RDD가 클러스터 내의 여러 노드에 분산되어 있다.
RDD 특징
In-Memory | RDD속의 데이터는 가능한 많이, 오래 메모리에 저장되어 있다.
불가변성(읽기 전용) | 한번 생성되고 나면 변하지 않는다. transformation 연산을 통해 새로운 RDD로써 만들 수 있다.
lazy evaluated(느린 실행) | RDD속의 데이터는 action으로 분류되는 연산자가 실행되기 전까지는 실제 수행되거나 transform되지 않는다.
cacheable | data를 캐싱할 수 있다.
Parallel(병행처리) | 병행 처리가 가능하다.
Typed(타입존재) | RDD 레코드는 타입을 가지고 있다. RDD[long],RDD[int,String]등등
Partitioned | 레코드들은 논리적인 파티션으로 분할되어 있고 클러스터의 여러노드에 분산저장되어 있다.
Dataframes, Dataset
Dataframe도 마찬가지로 변경할 수 없는 데이터 집합이다. 다만 RDB의 관계형 테이블처럼 칼럼이 존재하는 형식으로 구조화되어 있기 때문에 접근하기 좋고 대용량 데이터를 더 쉽게 처리할 수 있다는 장점이 있다.
DataFrame = Dataset[Row]
Spark 2.0에서 Dataframe API는 Datasets API와 통합되었다.
RDD는 구조적 API(Dataframe)이 제공하는 여러 최적화 기법을 사용할 수 없다.
그에 반해 Dataframe은 효율적, 안정적, 표현력이 좋다.
또한 RDD는 고수준 API에서 제공하지 않는 기능에 적합하지만 python에서는 성능 손실이 크다.
정말 필요한 경우가 아니면 RDD 수동 생성하지 않는 것이 좋다.
그렇다면 언제 RDD를 사용해야 할까?
low-level API인 Transformation, Action을 사용할 때
데이터가 미디어와 같이 비구조화 형태로 되어 있을 때
데이터를 함수형 프로그래밍으로 조작하고 싶을 때
데이터를 처리할 때, 칼럼 형식과 같은 스키마를 굳이 따지고 싶지 않을 때
최적화를 굳이 신경쓰지 않을 때
언제 Dataframe, Dataset를 사용해야 할까?
도메인 API, 추상화 등등이 필요할 때
filters, maps, aggergagion, 반구조화 데이터에서 람다 함수 등등이 필요할 때
스파크의 트랜스포메이션을 공부하던 중 부모 RDD와 자식 RDD의 종속성에 따라 좁고 넓은 종속성을 정의한다고 설명이 되어있다.
여기서 말하는 RDD란?
스파크의 데이터 형식 RDD, Dataframe, Dataset의 차이는?
The text was updated successfully, but these errors were encountered: