빅데이터/Apache Spark / / 2024. 2. 8. 14:13

Spark RDD ?

RDD는 Spark에서 중요한 개념 중 하나입니다.

스파크의 데이터 구조는 크게 RDD, Dataframe, Dataset으로 구분 할 수 있습니다.

RDD (Reliable Distributed Dataset)

RDD는 Spark 1.0부터 도입된 가장 기초적인 데이터 구조입니다.

RDD는 변경이 불가는한 데이터(객체)의 집합으로 여러 분산 노드에 걸쳐 저장됩니다.

각 RDD는 여러 개의 파티션으로 분리되어 있어서 이는 변경이 불가능하며 변경을 원할 겨웅 새로운 데이터 셋을 생성해야합니다.

 

RDD의 생성

RDD는 외부에서 데이터를 로딩하거나 코드에서 생성된 데이터를 저장함으로써 생성될 수 있습니다.

데이터 로딩은 Lazy 로딩 컨셉을 사용하며, 실제로는 action이 수행될 때 데이터가 로딩됩니다.

 

RDD의 두가지 오퍼레이션

Transformation 기존 RDD 데이터를 변경하여 새로운 RDD 데이터를 생성합니다. 예를들어 filter와 map 함수 등이 있습니다.

Action RDD 값을 기반으로 계산을 수행하고 결과를 생성합니다. 예를 들어 count()와 같은 연산이 있습니다.

 

RDD의 로딩과 메모리 관리

RDD의 데이터 로딩은 Lazy하게 이루어지며 필요한 시점에 데이터가 메모리에 올라갑니다.

Action을 수행한 후에는 로딩된 데이터가 바로 지워집니다.

RDD를 메모리에 상주시키고 싶다면 persist() 메서드를 사용할 수 있습니다.

 

Dataframe

데이터프레임은 여러행과 열로 구성됩니다. 이는 관계형 데이터베이스의 테이블이나 파이썬 판다스와 유사한 개념입니다.스파크 SQL 또는 스파크의 구조적 API를 사용하여 생성하고 조작하며 이는 스파크 클러스터의 여러 노드에 분산되어 저장됩니다. 내부적으로는 RDD로 구현되어 고성능 및 결함성을 제공하고 대규모 데이터셋을 효율적으로 처리할 수 있습니다.

 

데이터프레임은 스키마를 가지고 있어 각 열의 데이터 유형을 정의합니다. 이러한 스키마는 데이터프레임의 구조를 정의하고 데이터의 일관성을 보장합니다. 다양한 소스에서 데이터를 읽어들여 데이터 프레임을 생성할 수 있으며 예를 들어 CSV, JSON, Parquet 등의 파일 Hive 테이블, 외부 데이터베이스 등이 있습니다. 

 

데이터프레임은 분산환경에서 병렬처리를 통해 대규모 데이터셋을 처리할 수 있으므로 대규모 데이터를 다루는 분석 및 처리작업에 유용합니다.

 

Dataset

스파크의 데이터 구조 중 하나인 Dataset은 타입 안정성(type safety)을 제공하는 분산 컬렉션입니다. 데이터셋은 데이터프레임과 RDD(Resilient Distributed Dataset)의 특징을 결합한 것으로, 데이터프레임의 구조적 특징과 RDD의 함수형 프로그래밍 인터페이스를 모두 포함하고 있습니다.

 

Dataset은 자바와 스칼라에서만 사용할 수 있으며, 타입 안정성을 활용하여 컴파일 시점에 오류를 잡을 수 있습니다. 따라서 데이터셋을 사용하면 데이터에 대한 안정성을 보장하면서도 RDD와 유사한 성능을 유지할 수 있습니다.

데이터셋은 사용자 정의 객체(사용자가 정의한 클래스)로 구성된 컬렉션입니다. 이는 데이터프레임과 달리 스키마를 가지지 않으며, 각 레코드는 사용자가 정의한 클래스의 인스턴스입니다. 따라서 데이터셋을 사용하면 더 복잡한 데이터 구조와 작업을 처리할 수 있습니다.

 

다음 장에서는 더 공부하여 RDD의 원리를 살펴보겠습니다.

'빅데이터 > Apache Spark' 카테고리의 다른 글

Apache Spark 배경과 특징  (1) 2023.12.29
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유