← 목록으로
단계 07
Spark 입문 · 처리 · 심화
빅데이터 처리의 표준 도구 Spark. 왜 쓰는지, Pandas와 무엇이 닮았고 다른지, 그리고 "느리게 실행된다"는 게 무슨 뜻인지 쉽게.
Spark를 왜 쓸까
- MapReduce는 매 단계 디스크에 쓰느라 느림 → Spark는 메모리에서 처리해 훨씬 빠름
- 한 도구로 SQL, 스트리밍, 머신러닝까지 가능
- Python으로 쓸 수 있음 (PySpark)
한마디로 "여러 컴퓨터에서 돌아가는 Pandas" 라고 생각하면 시작하기 쉽습니다.
설치하고 한 번 돌려보기
pip install pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("hello").getOrCreate()
df = spark.read.csv("sales.csv", header=True, inferSchema=True)
df.show(5) # 앞 5줄 보기
df.printSchema() # 열 이름과 타입 보기
내 컴퓨터 한 대에서도 잘 돌아갑니다. 클러스터(여러 대)로 옮길 때도 코드는 그대로입니다.
Pandas와 비교하며 익히기
같은 일을 Pandas와 Spark로 나란히 보면 금방 감이 옵니다.
| 하고 싶은 일 | Pandas | Spark |
|---|---|---|
| 조건으로 고르기 | df[df.amount > 100] | df.filter(df.amount > 100) |
| 열 고르기 | df[["region", "amount"]] | df.select("region", "amount") |
| 그룹별 합계 | df.groupby("region").sum() | df.groupBy("region").sum() |
| 앞 몇 줄 보기 | df.head() | df.show() |
from pyspark.sql import functions as F
df.filter(F.col("amount") > 100) \
.groupBy("region") \
.agg(F.sum("amount").alias("total")) \
.show()
SQL로도 할 수 있다
SQL이 더 편하면 SQL을 쓰면 됩니다. 결과는 같습니다.
df.createOrReplaceTempView("sales")
spark.sql("SELECT region, SUM(amount) AS total FROM sales GROUP BY region").show()
꼭 알아둘 개념 하나: 지연 실행
Spark는 filter, groupBy 같은 명령을 바로 실행하지 않고 메모만 해둡니다. 그러다 show(), count(), write 처럼 "결과를 보여달라"는 명령이 오면 그때 한꺼번에 실행합니다.
df2 = df.filter(F.col("amount") > 100) # 아직 아무 일도 안 일어남
df2.show() # 이때 실행됨
왜 이렇게 할까요? 전체 계획을 다 보고 나서 가장 효율적인 순서로 실행하기 위해서입니다. "왜 아무 결과도 안 나오지?" 싶으면 show()를 안 부른 겁니다.
심화(10주차)는 딱 두 단어만
수업에서 자세히 다룰 내용이라 여기서는 이름만 알아두세요.
- 파티션(partition): 데이터를 몇 조각으로 나눠 동시에 처리할지
- 캐시(cache): 여러 번 쓰는 중간 결과를 메모리에 잠깐 붙잡아두기
연습
- Pandas로 했던 집계 하나를 PySpark로 똑같이 만들어보기
show()를 빼고 실행했을 때 아무 결과도 안 나오는 걸 직접 확인해보기