Scala, PySpark 비교

Jeonghak Cho·2025년 3월 25일

Spark

목록 보기
2/12

📗Python, Scala, Java 어떤 언어를 선택해야 하나

Spark에서 Python, Java, Scala 중 어떤 언어를 선택할지 고민해야 하는 이유는 각 언어마다 성능, 사용성, 기능 지원이 다르기 때문이다. Spark의 핵심은 Scala로 작성되었지만, Python과 Java도 지원되므로 상황에 맞게 선택해야 한다.

  • 목표 언어 선택하기
    • Spark를 최대한 활용하려면 > Scala
    • 데이터 분석, 머신러닝을 한다면 > Python
    • 기업 환경에서 Java를 많이 사용한다면 > Java
  • Python과 Scala 실행 방법 비교하기
    • Python 애플리케이션 구축

🔗[목차]

언어별 특징 비교

비교 항목ScalaPython (PySpark)Java
성능가장 빠름 (Spark의 기본 언어)느림 (JVM과 통신 오버헤드)빠름 (Scala와 유사)
사용 편의성어려움 (언어 난이도 높음)쉬움 (가장 배우기 쉬움)중간 (코드가 장황함)
Spark API 지원최상 (모든 기능 지원)제한적 (낮은 API 지원 수준)대부분 지원
유연성 & 생태계JVM 기반 (Scala 중심)ML 라이브러리 풍부 (Pandas, NumPy, TensorFlow)JVM 중심 (ML 환경 부족)
배포 & 유지보수어렵고 복잡함쉬움어렵고 복잡함

언어별 주요 고려사항

Scala

Spark 최적화가 필요한 엔지니어, 고성능 배치 처리에 사용한다.
장점

  • Spark와 가장 자연스럽게 연동됨 (JVM 기반, 내부 최적화)
  • RDD, Dataset, DataFrame API 모두 지원
  • 성능이 가장 뛰어남 (JVM에서 직접 실행)

단점

  • 언어 난이도가 높음 (초보자에게 어려움)
  • 커뮤니티 규모가 작음 (학습 자료 부족)

Python (PySpark)

데이터 분석, 머신러닝, 쉬운 Spark 개발이 필요한 경우 사용한다.
장점

  • 사용하기 가장 쉽고, 데이터 사이언스/ML과 연계 최적
  • Pandas, NumPy, Scikit-learn, TensorFlow와 연동 가능
  • PySpark는 DataFrame API 중심으로 발전 (최신 기능 반영)

단점

  • JVM과의 통신 오버헤드로 인해 느림
  • RDD API는 비효율적 (Dataset 지원 부족)
  • Python 단일 스레드(GIL 제한) → 병렬 처리 최적화 어려움

Java (Spark 엔터프라이즈용)

Java 기반 엔터프라이즈 환경, 기존 Java 프로젝트와 연동할 경우 사용한다.
장점

  • 기업 환경에서 Spark + Java 연동 용이
  • Scala보다 배우기 쉬움 (Java 개발자는 접근성 높음)
  • 성능은 Scala와 비슷한 수준

단점

  • 코드가 너무 장황함 (RDD 처리 코드가 길어짐)
  • DataFrame API 사용이 불편
  • ML, 데이터 분석 생태계 부족

PySpark는 왜 느릴까

PySpark vs Scala(Spark) 비교

비교 항목PySparkScala (Spark)
실행 속도느림 (약 2~5배 차이)빠름
JVM 인터페이스Py4J (Python → JVM 호출)네이티브 JVM
메모리 최적화Python 객체로 관리 (GC 영향)JVM 내부 최적화
사용 편의성Python 친숙 (데이터 분석가 친화적)개발자가 최적화 가능
ML 지원Pandas API, MLflow 연동 강점MLlib 지원

PySpark가 느린 이유

  • JVM ↔ Python 간 Py4J 오버헤드 발생
    • PySpark는 Python에서 JVM을 호출하여 Spark 작업을 실행
    • Py4J라는 라이브러리를 사용하기 때문에 JVM → Python 데이터 변환 비용 발생
  • Python의 GIL(Global Interpreter Lock) 문제
    • Python의 GIL로 인해 멀티스레드 실행이 비효율적
    • Scala는 JVM 기반이므로 멀티스레딩 성능이 좋음
  • UDF (User Defined Function) 실행 속도 차이
    • Python UDF는 JVM에서 실행되지 않고 Python에서 실행
    • Scala UDF는 네이티브 JVM에서 실행되어 훨씬 빠름

PySpak를 통해 애플리케이션 실행하기

스파크 서버 실행

Spark 서버는 도커를 사용했다. 도커로 스파크 서버를 실행한다. (컨테이너 내부의 /workspace 폴더와 현재 작업 폴더 Mount)

docker run -d \
  --name spark-master \
  -p 8080:8080 \
  -p 7077:7077 \
  -p 4040:4040 \
  -v $(pwd):/workspace \
  bitnami/spark:latest
  • 스파크 서버 확인
ubuntu@DESKTOP-SCOK45O:~/myspark/helloworld$ docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED       STATUS       PORTS
                                      NAMES
696db11c4d6e   bitnami/spark:latest   "/opt/bitnami/script…"   3 hours ago   Up 3 hours   0.0.0.0:4040->4040/tcp, [::]:4040->4040/tcp, 0.0.0.0:7077->7077/tcp, [::]:7077->7077/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   spark-master

PySpark 소스 작성

vi hello.py

class Greeting:
    def __init__(self):
        self.greeting = "Hello, Spark!"

class Hello(Greeting):
    def __init__(self):
        super().__init__()
        print(self.greeting)

if __name__ == "__main__":
    Hello()

PySpark 실행

PySpark는 SBT와 달리 패키지 관리자를 사용하지 않는다. 이로 인해 실행 방법은 매우 간단하다.

ubuntu@DESKTOP-SCOK45O:~/myspark$ docker exec -it 383fd62c157d spark-submit /workspace/hello.py
Hello, Spark!
25/03/25 03:45:08 INFO ShutdownHookManager: Shutdown hook called
25/03/25 03:45:08 INFO ShutdownHookManager: Deleting directory /tmp/spark-174fd0e6-865e-4f53-8edc-39a397d63d5d

⚙️ Scala(Spark) vs. Python(PySpark) 패키지 관리 차이

기능Scala (Spark)Python (PySpark)
패키지 관리자sbt, Maven, Gradlepip, conda
의존성 관리build.sbtrequirements.txt, pyproject.toml
패키지 설치 방법libraryDependencies +=pip install
JAR 패키징sbt package / sbt assemblyzipapp 또는 PyPI 패키지 배포
실행 방식spark-submit --class MainClass myapp.jarspark-submit myscript.py

0개의 댓글