Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RDD vs. Dataframe vs. Dataset #1

Open
heejin42 opened this issue Mar 28, 2023 · 2 comments
Open

RDD vs. Dataframe vs. Dataset #1

heejin42 opened this issue Mar 28, 2023 · 2 comments

Comments

@heejin42
Copy link
Owner

heejin42 commented Mar 28, 2023

스파크의 트랜스포메이션을 공부하던 중 부모 RDD와 자식 RDD의 종속성에 따라 좁고 넓은 종속성을 정의한다고 설명이 되어있다.
image

여기서 말하는 RDD란?
스파크의 데이터 형식 RDD, Dataframe, Dataset의 차이는?

@heejin42
Copy link
Owner Author

heejin42 commented Mar 29, 2023

[참고] https://www.databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html

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와 통합되었다.

@heejin42
Copy link
Owner Author

RDD는 구조적 API(Dataframe)이 제공하는 여러 최적화 기법을 사용할 수 없다.
그에 반해 Dataframe은 효율적, 안정적, 표현력이 좋다.
또한 RDD는 고수준 API에서 제공하지 않는 기능에 적합하지만 python에서는 성능 손실이 크다.
정말 필요한 경우가 아니면 RDD 수동 생성하지 않는 것이 좋다.

그렇다면 언제 RDD를 사용해야 할까?

  • low-level API인 Transformation, Action을 사용할 때
  • 데이터가 미디어와 같이 비구조화 형태로 되어 있을 때
  • 데이터를 함수형 프로그래밍으로 조작하고 싶을 때
  • 데이터를 처리할 때, 칼럼 형식과 같은 스키마를 굳이 따지고 싶지 않을 때
  • 최적화를 굳이 신경쓰지 않을 때

언제 Dataframe, Dataset를 사용해야 할까?

  • 도메인 API, 추상화 등등이 필요할 때
  • filters, maps, aggergagion, 반구조화 데이터에서 람다 함수 등등이 필요할 때
  • Catalyst 최적화 및 Tungsten 코드를 사용하고 싶을 때
  • API를 단순화하여 사용하고 싶을때
  • R, Python 사용자

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant