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
'Data Engineering > python' 카테고리의 다른 글
EP23 | 고급 Python 활용 #12 | Spark MLlib을 활용한 머신러닝 데이터 분석 (0) | 2025.03.19 |
---|---|
EP22 | 고급 Python 활용 #11 | Spark Streaming을 활용한 실시간 데이터 처리 (0) | 2025.03.19 |
EP20 | 고급 Python 활용 #9 | 데이터 자동화 및 작업 스케줄링 (Airflow) (0) | 2025.03.19 |
EP19 | 고급 Python 활용 #8 | 웹 스크래핑 (BeautifulSoup, Selenium) (2) | 2025.03.19 |
EP18 | 고급 Python 활용 #7 | API 데이터 활용 (REST API, JSON 처리) (0) | 2025.03.19 |