데이터/Apache Spark

[Apache Spark] 로컬 환경에 설치 및 간단 예제

캣코딩 2023. 11. 26. 11:30

이번에는 로컬 환경에 Apache Spark를 설치하고 간단한 예제를 작성하여 실습을 진행해 보도록 하겠습니다.

저는 macOS를 사용하고 있어서, 윈도우 환경에서 진행하시는 분들과는 약간의 차이가 있을 수 있습니다.

 

자바 설치

먼저 Apache Spark에 필요한 Java를 설치해 줍니다. 자바 설치 방법은 다양하기 때문에 따로 설명을 추가하진 않겠습니다.

 

java --version

터미널에서 위 명령어를 입력했을 때, 버전 정보가 정상적으로 출력된다면 설치가 완료된 것 입니다.

 

IDE 설치

코드 작성에 사용할 IDE를 설치 해 줍니다. 저는 PyCharm을 사용하도록 하겠습니다. PyCharm 이외에 본인이 편하신 IDE를 사용하셔도 됩니다.

 

https://www.jetbrains.com/products/compare/?product=pycharm&product=pycharm-ce

 

JetBrains Products Comparison

 

www.jetbrains.com

PyCharm은 커뮤니티 버전을 무료로 사용하실 수 있습니다.

 

프로젝트 생성

프로젝트를 생성해 줍니다. 저는 이름을 `spark-practice-1`으로 하였습니다. 이름은 본인이 원하시는 이름으로 지정하시면 됩니다.

 

새로운 가상 환경을 추가하면서 프로젝트를 생성해 줍니다.

 

IDE의 터미널을 열었을 때, `(venv)`라는 표시가 보인다면, 가상 환경이 정상적으로 설정된 것입니다.

 

Spark 설치

pip install pyspark

IDE의 터미널에서 `pip install pyspark` 명령어를 입력하여, 현재 가상 환경에 Spark를 설치 해 줍니다.

 

pyspark

설치 후, 터미널에서 `pyspark` 명령어를 입력했을 때, 스파크 내부로 정상적으로 진입이 된다면 설치가 정상적으로 완료된 것입니다.

 

실습 데이터 다운로드

실습은 간단한 데이터 파일을 읽어와서 해당 파일의 워드 카운트를 집계하는 예제를 작성하도록 하겠습니다.

 

curl -O https://raw.githubusercontent.com/apache/spark/master/data/mllib/sample_lda_data.txt

터미널에서 위 명령어를 입력하여, 워드 카운트를 추출할 예제 샘플 파일 `sample_lda_data.txt` 파일을 다운로드 합니다.

 

코드 작성

# PySpark의 `SparkSession` 모듈을 가져오는 부분입니다.
# `SparkSession`은 Spark 애플리케이션을 시작하기 위한 주요 진입점입니다.
from pyspark.sql import SparkSession

if __name__ == '__main__':
    # SparkSession을 생성합니다.
    # Spark 애플리케이션의 이름을 "WordCount"로 지정합니다.
    ss = SparkSession.builder \
        .appName("WordCount") \
        .getOrCreate()

    # RDD(Resilient Distributed Dataset)를 생성합니다.
    # `textFile` 함수를 사용하여 파일의 각 줄을 RDD로 변환합니다.
    rdd = ss.sparkContext.textFile("sample_lda_data.txt")

    # 각 단어의 등장 횟수를 세어 출력합니다.
    # `flatMap` 함수는 각 줄을 공백을 기준으로 단어로 나누고, `map` 함수는 각 단어를 (단어, 1) 형태로 매핑합니다.
    # `reduceByKey` 함수를 사용하여 동일한 키(단어)를 가진 항목들을 합산합니다.
    word_counts = rdd.flatMap(lambda line: line.split(" ")) \
        .map(lambda word: (word, 1)) \
        .reduceByKey(lambda a, b: a + b)

    # 결과를 출력합니다.
    # `collect` 함수를 사용하여 RDD를 로컬 컬렉션으로 변환하고, 각 단어와 해당 등장 횟수를 출력합니다.
    for word, count in word_counts.collect():
        print(f"{word}: {count}")

 

이 코드는 단순한 형태의 Word Count 예제로, PySpark를 사용하여 대용량의 데이터를 분산 처리하는 기본적인 방법을 보여줍니다.