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) 작업 등을 수행할 수 있습니다.
긴 글 읽어주셔서 감사합니다.
'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 |
