← 목록으로
단계 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로 나란히 보면 금방 감이 옵니다.

하고 싶은 일PandasSpark
조건으로 고르기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): 여러 번 쓰는 중간 결과를 메모리에 잠깐 붙잡아두기

연습

  1. Pandas로 했던 집계 하나를 PySpark로 똑같이 만들어보기
  2. show()를 빼고 실행했을 때 아무 결과도 안 나오는 걸 직접 확인해보기