Data Engineering/python

EP21 | 고급 Python 활용 #10 | Spark와 Python을 활용한 대용량 데이터 처리

ygtoken 2025. 3. 19. 23:08
728x90

이 글에서 다루는 개념

Apache Spark는 대용량 데이터를 빠르게 처리할 수 있는 분산 컴퓨팅 프레임워크입니다.
이번 글에서는 다음 내용을 학습합니다.

  • Apache Spark 개념 및 아키텍처
  • PySpark 설치 및 환경 설정
  • Spark DataFrame을 활용한 데이터 처리
  • Spark SQL을 활용한 데이터 분석
  • RDD(Resilient Distributed Dataset)와 DataFrame 비교

1️⃣ Apache Spark란?

📌 Apache Spark란?

  • 대용량 데이터를 병렬 분산 처리하는 프레임워크
  • Hadoop보다 100배 빠른 메모리 기반 연산 가능
  • 머신러닝, 스트리밍 데이터 처리 등 다양한 기능 지원

📌 Spark 주요 개념

 

개념 설명
RDD Spark의 기본 데이터 구조 (Resilient Distributed Dataset)
DataFrame SQL과 유사한 구조화된 데이터 처리
Spark SQL SQL 쿼리 실행 가능
Spark Streaming 실시간 데이터 처리
MLlib 머신러닝 라이브러리

2️⃣ PySpark 설치 및 환경 설정

📌 설치 (pyspark 패키지 사용)

pip install pyspark

 

📌 PySpark 실행 확인

import pyspark
print(pyspark.__version__)

 

📌 SparkSession 생성 (Python 환경에서 실행하기 위해 필수)

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("PySparkExample").getOrCreate()

print("SparkSession 생성 완료!")

3️⃣ Spark DataFrame을 활용한 데이터 처리

📌 데이터프레임 생성 (createDataFrame())

from pyspark.sql import Row

data = [
    Row(id=1, name="Alice", age=25),
    Row(id=2, name="Bob", age=30),
    Row(id=3, name="Charlie", age=35),
]

df = spark.createDataFrame(data)
df.show()

 

📌 출력 결과

+---+-------+---+
| id|   name|age|
+---+-------+---+
|  1|  Alice| 25|
|  2|    Bob| 30|
|  3|Charlie| 35|
+---+-------+---+

🔹 CSV 파일 불러오기 및 저장하기

df = spark.read.csv("data.csv", header=True, inferSchema=True)
df.show()
df.write.csv("output.csv", header=True)

 

📌 옵션 설명

  • header=True → CSV의 첫 번째 줄을 컬럼명으로 사용
  • inferSchema=True → 데이터 타입 자동 추론

🔹 데이터 필터링 및 정렬 (filter(), orderBy())

df_filtered = df.filter(df.age > 25)  # 나이가 25 이상인 데이터
df_sorted = df.orderBy(df.age.desc())  # 나이 내림차순 정렬

df_filtered.show()
df_sorted.show()

4️⃣ Spark SQL을 활용한 데이터 분석

📌 SQL을 사용하여 데이터 조회

df.createOrReplaceTempView("people")

query = spark.sql("SELECT name, age FROM people WHERE age > 25")
query.show()

 

📌 출력 결과

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

5️⃣ RDD(Resilient Distributed Dataset)와 DataFrame 비교

📌 RDD와 DataFrame 차이점

  

비교 항목 RDD DataFrame
데이터 구조 비구조화된 데이터 구조화된 데이터
속도 느림 빠름 (최적화된 연산)
사용 방식 함수형 프로그래밍 SQL 및 함수 지원
사용 편의성 어렵다 쉽다

📌 RDD 생성 예제

rdd = spark.sparkContext.parallelize([("Alice", 25), ("Bob", 30), ("Charlie", 35)])
df = rdd.toDF(["name", "age"])  # RDD → DataFrame 변환
df.show()

📌 실전 문제: PySpark 데이터 처리 연습하기


문제 1: PySpark DataFrame 생성 및 출력

📌 이름과 나이를 포함한 데이터프레임을 생성하고 출력하세요.

from pyspark.sql import Row
# 🔽 여기에 코드 작성
from pyspark.sql import Row

data = [
    Row(name="Alice", age=25),
    Row(name="Bob", age=30),
    Row(name="Charlie", age=35),
]

df = spark.createDataFrame(data)
df.show()

문제 2: CSV 파일을 읽고 데이터 조회하기

📌 people.csv 파일을 읽고, 상위 5개 데이터를 출력하세요.

# 🔽 여기에 코드 작성
df = spark.read.csv("people.csv", header=True, inferSchema=True)
df.show(5)

문제 3: 특정 조건을 만족하는 데이터 필터링

📌 나이가 30 이상인 사람만 출력하세요.

# 🔽 여기에 코드 작성
df_filtered = df.filter(df.age >= 30)
df_filtered.show()

문제 4: SQL을 사용하여 특정 컬럼 조회

📌 Spark SQL을 사용하여 name과 age 컬럼을 출력하세요.

# 🔽 여기에 코드 작성
df.createOrReplaceTempView("people")
query = spark.sql("SELECT name, age FROM people")
query.show()

 

 

728x90