이야기박스
Chapter 3. The majestic role of the dataframe 본문
# 개요
Dataframe에 위대함을 깨우쳐 봅시다!
라는 게 이 챕터의 핵심입니다. 표현이 아주 거창하죠?
표현이야 어쨌든 굉장히 편리한 건 사실입니다. Dataframe은 스키마와 강력한 API를 제공하니까요.
스파크를 잘 사용하려면 논리적 계층(어플리케이션 계층)과 물리적 계층(하드웨어 계층)을 모두 잘 알아야 합니다.
여기서 Dataframe은 스파크의 논리적 계층을 대표한다고 보면 될 것 같습니다.
RDD(Resilient Distributed Dataset)는 스파크의 초기 데이터셋입니다. 이 챕터에서 다루는 Dataframe은 RDD를 기반으로 구성되었습니다. 그리고 앞으로 Spark를 사용하면서 Dataframe과 Dataset, RDD를 끊임없이 다루게 됩니다.
Dataframe, Dataset, RDD는 요기 포스팅에서 참조 부탁 드립니다.
# Summary
- 마지막
- 요약을
- 미리 보여줌
# Dataframe == Data structure + API
데이터프레임을 사용하게 되면 여러 라이브러리의 API를 따로 공부할 필요가 없습니다!"
"통합된 하나의 API로 편하게 개발을 해보세요!
공익광고 문구 같은 내용이 책에 써져 있습니다. 근데 현업에서 사용해보니 정말 편하긴 해요. 스파크는 데이터프레임으로 Spark SQL, Spark Streaming, ML, GraphX와 같은 모든 종류의 API를 사용할 수 있습니다.
## Organization of a Dataframe
Dataframe은 다음과 같은 특성을 지니고 있습니다.
1. Dataframe은 이름 있는 Column으로 구성된 레코드들의 집합입니다.
2. Dataset의 하나의 Row입니다. (Dataset[Row] <-- Spark 2.0 이후)
3. StructType의 스키마를 가지고 있습니다.
4. 주로 메모리에 있지만, 때때로 전략에 따라 디스크에 있을 수도 있습니다.
5. 여러 개의 파티션으로 분할되어 저장됩니다.
## Immutability
스파크 데이터는 불변성을 가진다.
이상하죠? 데이터가 변하지 않는데, 데이터 파이프라인이 무슨 의미가 있을까요?
여기서 말하는 스파크의 Immutability는 다음과 같습니다.
Spark stores the initial state of the data , in an immutable way
즉 Action을 취하기 전, 원본 데이터가 그대로 보관되고 있다는 의미입니다.
Spark는 Lazy하다고 했었죠? 스파크는 여러 Transformation 요청들을 레시피(recipe) 형태로 저장합니다. 그리고 Action이 취해지면 한 번에 실행하죠.
스파크는 왜 이런 동작 방식을 취할까요?
그것은 각 노드별로 흩어진 데이터의 싱크를 맞추는 작업보다, 레시피의 싱크를 맞추는 작업이 손쉽기 때문입니다.
## Partition
파티션은 데이터프레임에서 직접 접근할 수는 없습니다. RDD를 통해서 접근해야 하죠.
파티션은 노드 수, 데이터 세트 크기에 따라 할당이 됩니다. 단, 하나의 데이터프레임에는 최소 하나의 파티션은 생겨야겠죠?
사이즈와 파티션을 이야기하자면, 데이터 세트 크기가 일반적으로 128MB 미만이면 하나의 파티션만 생성하게 됩니다.
# 후기
자잘한 예제는 스킵하고 근본적인 Spark의 원리 위주로 다루었습니다.
Spark API의 상세한 내용을 다루는 포스팅은 다음 기회에 작성하겠습니다.
'Computer & Data > Big Data' 카테고리의 다른 글
Hadoop 시리즈. Hadoop Ecosystem (0) | 2020.11.20 |
---|---|
Chapter 4. Fundamentally lazy (0) | 2020.11.12 |
Spark Appendix. RDD vs Dataframe vs Dataset (0) | 2020.10.22 |
Chapter 8. Ingestion from databases (0) | 2020.08.06 |
Chapter 7. Ingestion from files (0) | 2020.08.06 |