Spark SQL과 데이터 처리

2025. 3. 20. 12:15·Data Engineer
728x90

Apache Spark는 대규모 데이터를 빠르게 처리할 수 있는 강력한 프레임워크입니다.

그 중에서도 Saprk SQL은 SQL을 활용하여 데이터를 효율적으로 처리할 수 있도록 도와주는 핵심 컴포넌트입니다.

1. Spark SQL이란?

Spark SQL은 구조화된 데이터(Structured Data)를 다루기 위한 Spark의 모듈로,SQL 문법을 활용해서 대규모 데이터를 효율적으로 처리할 수 있도록 해줍니다. Spark의 기본적인 데이터 처리 엔진인 DataFrame 및 Dataset API를 기반으로 하며, 분산 컴퓨팅 환경에서 SQL을 실행할 수 있도록 설계되었습니다.

2. Spark SQL vs 일반 SQL

비교 항목 Spark SQL 일반 SQL (RDBMS)
실행 환경 분산 환경(클러스터) 단일 서버
처리 방식 In-memory 기반 디스크 기반
확장성 높은 확장성 (클러스터 확장 가능) 확장성 제한적
지원 API SQL, DataFrame, Dataset SQL
데이터 소스 다양한 데이터 소스 (Hive, Parquet, JSON, CSV 등) 주로 관계형 데이터베이스
성능 최적화 Catalyst Optimizer 사용 일반적으로 인덱스 및 쿼리 최적화

3. Spark SQL 기본 사용법

Spark SQL을 활용하려면 SparkSession을 생성하고, 데이터를 DataFrame 형태로 로드한 후 SQL을 실행하면 됩니다.

3.1 SparkSession 생성

from pyspark.sql import SparkSession

# SparkSession 생성
spark = SparkSession.builder \
    .appName("Spark SQL Example") \
    .getOrCreate()

3.2 데이터 로드 및 테이블 생성

from pyspark.sql import Row

# 샘플 데이터 생성
data = [
    Row(id=1, name="Alice", age=25, city="New York"),
    Row(id=2, name="Bob", age=30, city="Los Angeles"),
    Row(id=3, name="Charlie", age=35, city="Chicago"),
]

# DataFrame 생성
df = spark.createDataFrame(data)

# 테이블 등록
df.createOrReplaceTempView("users")

3.3 SQL 쿼리 실행

# SQL 실행
result = spark.sql("SELECT * FROM users WHERE age > 28")
result.show()

출력 결과:

+---+-------+---+-------------+
| id|   name|age|        city|
+---+-------+---+-------------+
|  2|    Bob| 30| Los Angeles|
|  3|Charlie| 35|     Chicago|
+---+-------+---+-------------+

4.일반 SQL과의 차이점 상세 부석

4.1 데이터 저장 방식

Spark SQL은 RDBMS와 달리 데이터를 DataFrame 및 RDD로 메모리에 저장하며, 필요한 경우 Parquet, ORC, JSON 등의 형식으로 저장할 수 있습니다.

# DataFrame을 Parquet 파일로 저장
df.write.parquet("people.parquet")

# 저장된 데이터 불러오기
df_parquet = spark.read.parquet("people.parquet")
df_parquet.show()

출력 결과:

+---+-------+---+-------------+
| id|   name|age|        city|
+---+-------+---+-------------+
|  1|  Alice| 25|   New York |
|  2|    Bob| 30|Los Angeles|
|  3|Charlie| 35|     Chicago|
+---+-------+---+-------------+

4.2 성능 최적화 (Catalyst Optimizer & Tungsten)

Spark SQL은 Catalyst Optimizer를 사용하여 쿼리를 최적화하고, Tungsten 엔진을 통해 메모리 및 CPU 효율을 극대화합니다.
일반 SQL에서는 데이터베이스 엔진에 따라 최적화 방법이 다르지만, Spark SQL은 분산 환경에서도 최적화 가능합니다.

예제: 쿼리 실행 계획 확인

spark.sql("SELECT * FROM users WHERE age > 28").explain(True)

출력 예시:

== Optimized Logical Plan ==
Filter (age#2 > 28)
+- LogicalRDD [id#0, name#1, age#2, city#3]

5. 실전 예제: JSON 데이터 처리

Spark SQL은 다양한 데이터 소스를 지원하며, JSON 데이터를 쉽게 처리할 수 있습니다.

5.1 JSON 파일 읽기

# JSON 데이터 로드
df_json = spark.read.json("users.json")
df_json.createOrReplaceTempView("users_json")

5.2 SQL 쿼리 실행

result_json = spark.sql("SELECT name, age FROM people_json WHERE age >= 30")
result_json.show()

출력 결과:

+------+---+
|  name|age|
+------+---+
|   Bob| 30|
|Charlie| 35|
+------+---+

6. 정리 및 결론

Spark SQL은 대규모 데이터를 효율적으로 처리할 수 있는 강력한 도구이며, SQL 기반의 쿼리 실행을 통해 친숙한 방식으로 데이터를 다룰 수 있습니다.
일반 SQL과 비교했을 때 확장성과 성능 최적화 측면에서 장점이 있으며, 다양한 데이터 소스를 지원하는 유연성을 갖추고 있습니다.

실제 프로젝트에서는 Spark SQL을 활용하여 실시간 데이터 분석, 데이터 웨어하우스 구축, ETL(Extract, Transform, Load) 작업 등을 수행할 수 있습니다.

긴 글 읽어주셔서 감사합니다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Data Engineer' 카테고리의 다른 글

Spark SQL에서 자주 발생하는 오류 2  (0) 2025.03.20
Spark SQL에서 자주 발생하는 오류  (0) 2025.03.20
Oracle VM VirtualBox를 활용해서 Linux OS 설치방법  (0) 2023.11.02
mongo db란?  (0) 2023.09.22
Flask란? (Flask 설치방법)  (0) 2023.09.21
'Data Engineer' 카테고리의 다른 글
  • Spark SQL에서 자주 발생하는 오류 2
  • Spark SQL에서 자주 발생하는 오류
  • Oracle VM VirtualBox를 활용해서 Linux OS 설치방법
  • mongo db란?
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (160)
      • python (47)
        • selenium (4)
        • algorithm (10)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (36)
      • Data Scientist (3)
      • Data Analysis (11)
      • Computer Science (36)
      • Why? (16)
      • 마음가짐 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
Spark SQL과 데이터 처리
상단으로

티스토리툴바