Spark DataFrame 기초 실습 시작하기

1. 실습 시작 전 확인 사항 (매우 중요)

본격적으로 실습을 시작하기 전에, 두 가지를 반드시 확인해야 합니다.

✅ 1) 데이터셋이 정상적으로 설치되었는지 확인

Databricks 환경의 왼쪽 메뉴에서 다음 순서로 이동합니다.

  • Data 클릭
  • Add Data
  • DBFS (Databricks File System)
  • FileStore
  • Tables
  • 이전 강의에서 생성한 데이터 폴더

이 경로에서:

  • 이전 강의에서 업로드한 모든 데이터 파일이 보인다면
    👉 데이터셋은 정상적으로 설치된 것입니다.

✅ 2) 클러스터가 실행 중인지 확인

Apache Spark는 클러스터 없이는 아무 작업도 할 수 없습니다.

Community Edition에서는:

  • 동시에 하나의 클러스터만 실행 가능합니다.

클러스터가 없다면:

  • Create Cluster 클릭
  • 클러스터 이름 입력
  • Create Cluster 클릭

자세한 클러스터 생성 방법은
👉 이전 강의 영상을 참고하시면 됩니다.


2. Workspace 및 노트북 생성

이제 Spark 코드를 작성할 노트북(Notebook) 을 생성하겠습니다.

2-1. Workspace 폴더 생성

왼쪽 메뉴에서:

  • Workspace 클릭
  • Workspace 옆 화살표(▶) 클릭
  • Create → Folder 선택

폴더 이름 예시:

  • Databricks Certified Associate Developer Training

2-2. Notebook 생성

생성한 폴더 안에서:

  • Create → Notebook 클릭

다음 정보를 입력합니다.

  • Notebook Name
    • DataFrame_Basics
  • Language
    • Scala
  • Cluster
    • 이미 생성해 둔 클러스터 선택

모두 입력한 후:

  • Create 클릭

이제 Spark 클러스터에 연결된 노트북이 생성되었습니다.


3. Spark Session 이해하기

Databricks 노트북에서는 이미 Spark Session이 자동으로 생성되어 있습니다.

Spark Session은:

  • Spark 애플리케이션의 진입점(entry point)
  • 클러스터 매니저 및 Executor와 통신하는 창구

Databricks에서는 기본적으로
👉 spark 라는 변수명으로 제공됩니다.

Spark Session 확인

노트북 셀에 다음을 입력하고 실행해 보세요.

1
spark

정상적으로 실행되면
👉 현재 사용 중인 Spark Session 정보가 출력됩니다.


4. Spark DataFrame 생성하기 (JSON 파일)

이제 실제 데이터를 읽어서 DataFrame을 만들어 보겠습니다.


4-1. DataFrameReader 사용

Spark Session의 read 메서드는
👉 DataFrameReader를 반환합니다.

1
spark.read

이를 이용해 외부 데이터를 DataFrame으로 읽을 수 있습니다.

4-2. customer.json 파일로 DataFrame 생성

먼저 DataFrame 변수를 하나 정의합니다.

1
2
3
val customerDF = spark.read
.format("json")
.load("/FileStore/tables/Databricks/Certified/Associate/Developer/Data/customer.json")

이 코드는 다음 작업을 수행합니다.

  • JSON 파일을 읽고
  • 그 내용을 기반으로 customerDF라는 DataFrame을 생성합니다

📌 중요

  • 데이터 경로는 반드시 이전에 업로드한 위치와 정확히 일치해야 합니다.
  • 경로가 다르면 코드가 실행되지 않습니다.

5. 원본 JSON 파일 내용 확인하기

DataFrame을 만들기 전에,
실제 JSON 파일 안에 어떤 데이터가 있는지 확인해 보겠습니다.

1
dbutils.fs.head("/FileStore/tables/Databricks/Certified/Associate/Developer/Data/customer.json")

이 명령은 다음과 같은 역할을 합니다.

  • JSON 파일의 앞부분을 출력
  • 데이터 구조를 빠르게 확인하는 데 매우 유용

6. DataFrame 데이터 확인하기

이제 생성된 DataFrame을 직접 확인해 보겠습니다.

Databricks 환경에서는 display() 함수를 사용할 수 있습니다.

1
display(customerDF)

출력 결과를 보면 다음과 같은 컬럼을 확인할 수 있습니다.

  • address_id
  • bad
  • country
  • birth_date
  • demographics

📌 demographics 컬럼은 struct 타입의 복합 컬럼입니다.


DataFrame 스키마(Schema) 확인

컬럼 이름과 데이터 타입을 확인하려면 다음 명령을 사용합니다.

1
customerDF.printSchema()

이 결과에서 확인할 수 있는 정보는 다음과 같습니다.

  • 컬럼 이름
  • 데이터 타입
  • nullable 여부 (null 가능 여부)

📌 nullable 정보는

  • 데이터 최적화를 위한 힌트이며
  • 실제로 null 값이 반드시 없다는 의미는 아닙니다

7. DataFrame과 Spark 아키텍처 연결해서 이해하기

이제 DataFrame이 어디에, 어떻게 저장되는지를 이해해 보겠습니다.


Apache Spark 전체 구조 요약

  • Cluster Manager

    • 클러스터 전체 관리
  • Node Manager

    • 각 워커 노드 관리
  • Spark Driver

    • 작업 계획 및 제어
  • Spark Executors

    • 실제 연산 수행
    • 데이터를 메모리에 보관

Executor와 메모리

각 Executor는 다음과 같은 리소스를 할당받습니다.

  • 일정 개수의 CPU Core
  • 일정 크기의 Memory(RAM)

Spark가 데이터를 읽으면:

  • 데이터는 Executor의 메모리에 저장되고
  • 이 데이터는 DataFrame 형태로 관리됩니다

8. Partition 개념 이해하기

Apache Spark는 데이터를 자동으로 나눕니다.

이 나뉜 데이터 조각을 Partition이라고 합니다.

  • 하나의 Partition = 여러 Row의 묶음
  • 하나의 Partition은 하나의 머신(Executor)에 위치

👉 DataFrame의 Partition 구조는
👉 데이터가 클러스터에 어떻게 분산 저장되는지를 결정합니다.


9. DataFrame이란 무엇인가?

DataFrame은 다음과 같은 특징을 가집니다.

  • 분산된 데이터 컬렉션
  • 구조화된 형태 (Schema 존재)
  • 관계형 데이터베이스의 테이블과 매우 유사

DataFrame의 특징

  • 행(Row)과 열(Column)로 구성
  • 모든 Row는 동일한 컬럼 구조를 가짐
  • 각 컬럼은 다음 정보를 가짐
    • 이름(Name)
    • 데이터 타입(Data Type)
    • nullable 정보

이 컬럼 정의 전체를 Schema라고 부릅니다.


10. DataFrame Schema의 중요성

Schema는 매우 중요합니다.

이유는 다음과 같습니다.

  • 문자열을 숫자로 잘못 처리하는 오류 방지
  • 연산 최적화
  • 안정적인 데이터 처리

Schema를 확인하려면 다음 메서드를 사용합니다.

printSchema()

Apache Spark는:

  • DataFrame이 어떤 Partition에 있는지
  • 데이터가 어디에 분산되어 있는지

를 내부적으로 모두 관리해 주기 때문에
👉 개발자는 분산 처리에 대해 직접 신경 쓰지 않아도 됩니다.


11. 정리 및 다음 강의 예고

이번 강의에서 배운 내용은 다음과 같습니다.

  • ✅ 데이터셋 및 클러스터 확인
  • ✅ Spark Session 이해
  • ✅ JSON 파일로 DataFrame 생성
  • ✅ DataFrame 구조와 Schema 이해
  • ✅ Partition 개념 이해

다음 강의에서는:

  • DataFrame Schema를 직접 정의하는 방법
  • 데이터 타입을 명확히 지정하는 방법

을 살펴보겠습니다.