PySpark

썹스·2024년 4월 1일

Apache Spark

목록 보기
2/2

PySpark

Apache Spark는 기본적으로 JAVA 언어 기반으로 구동 가능한 프레임워크이다.

하지만 데이터 분석 작업의 경우 대부분 Python 또는 R 언어로 업무를 수행하기 때문에 해당 언어 환경에서 Apache Spark를 사용할 수 있는 전용 인터페이스를 사용해야 한다.

Python 환경에서 Apache Spark를 사용할 수 있는 인터페이스는 PySpark라 부른다.

✅ pyspark 환경 세팅(with Google Colab)

로컬(Local)환경에서 pyspark를 사용할 경우 JAVA 버전과 충돌이 발생할 수 있기 때문에 Google Colab을 활용하여 분석을 진행할 예정이다.

## jdk 설치
## PySpark는 Java 가상 머신 위에서 동작하기 때문에 JDK가 필요
!apt-get install openjdk-8-jdk-headless 

## spark file
## Apache Spark의 압축 파일을 다운로드(Spark 3.0.0 버전을 사용)
!wget -q https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop3.2.tgz

## spark 압축풀기
## 다운로드 받은 Spark 압축 파일을 압축 해제
!tar -xf spark-3.0.0-bin-hadoop3.2.tgz

## spark 찾기
## PySpark를 Python 환경에서 사용할 수 있도록 하는 findspark 라이브러리를 설치
!pip install findspark

## 캐글 데이터를 다운받기 위해 kaggle library 설치
!pip install kaggle --upgrade 


## 운영체제와의 상호작용을 돕는 다양한 기능을 제공하는 모듈
import os 
import findspark

## 환경변수에 path 지정
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-3.0.0-bin-hadoop3.2"

## spark의 경우 잘 찾지 못하는 경우가 있어 findsaprk를 이용
findspark.init() 

✅ pyspark 사용(with Google Colab)

spark를 사용하기 위해서는 SparkSession 객체를 선언해야 한다.

from pyspark.sql import SparkSession

spark = (                       # "spark"란 이름의 SparkSession 객체
    SparkSession
    .builder
    .appName("pyspark_test")
    .master("local[*]")         # local환경에서 사용, 모든 쓰레드(*)를 사용
    .getOrCreate()              # 객체 생성
    )

✅ 데이터 불러오기(with Google Colab & Kaggle)

캐글 API를 활용하여 별도의 데이터 다운로드 없이(로컬 저장X) Google Colab에 데이터를 불러오려면 아래와 같은 코드를 활용하면 된다.

## 캐글에서 받아온 API Token file(kaggle.json)을 Google colab에 업로드
from google.colab import files
files.upload()

## kaggle 폴더 생성
!mkdir -p ~/.kaggle/

## kaggle 폴더에 kaggle.json 파일 복사 저장
!cp kaggle.json ~/.kaggle/ 

## file 접근 권한 할당(600: 소유자 읽기, 쓰기 권한 / 리눅스 퍼미션 참고)
!chmod 600 ~/.kaggle/kaggle.json 

## Data Download (캐글 Copy API command)
!<캐글 사이트에서 가져온 "Copy API command">

## 압축풀기
!unzip <압축 파일명>.zip 

✅ 데이터 읽어오기(with Google Colab)

PySpark와 Pandas는 비슷한 문법을 가지고 있지만, 활용 목적과 용도에 따라 다르게 적합성이 다르다.

PySpark은 대규모 데이터 처리와 분석에 적합한 분산 컴퓨팅 프레임워크이며, Pandas는 상대적으로 작은 데이터셋에 대한 데이터 처리 및 분석에 적합한 라이브러리이다.

df = <SparkSession 객체명>.read.<파일 확장자>(path="<파일명>", 옵션...)

✅ 데이터 저장하기(with Google Colab)

Spark환경에서 대용량 데이터를 처리할 때는 .parquet 확장자로 저장하여 사용하는 것이 효율적이다.
(parquet 파일은 고성능, 효율적인 압축 및 분산 환경에 최적화된 형식)

df.write.format("parquet").save(
    path = "<parquet파일로 저장할 파일명>",
    옵션...)

✅ PySpark SQL vs DataFrame api

PySpark에서는 두 가지 주요 데이터 처리 인터페이스인 PySpark SQL과 DataFrame API가 존재한다.

🟧 PySpark SQL

PySpark SQL은 Spark에서 구조화된 데이터 처리를 위한 모듈이며, 이 모듈은 SQL 쿼리를 사용하여 데이터를 처리할 수 있다.
또한, PySpark SQL은 SQL 쿼리문을 사용하여 데이터를 다룬다는 특징이 있다.

🟧 DataFrame API

DataFrame API는 분산 데이터 프레임을 다루기 위한 API이며, 데이터를 구조화된 형식으로 처리하고 변환할 수 있다.
또한, DataFrame API는 Python의 Pandas와 유사한 API를 가지고 있다는 특징이 있다.(Pandas에 익숙한 사용자들에게 쉽게 접근 가능)

🟧 PySpark SQL vs DataFrame API

PySpark SQL과 DataFrame API는 각각의 장단점을 가지고 있으며, 데이터 처리 작업에 따라 적합한 방식을 채택하여 사용하는 것을 지향해야 한다.

일반적으로 PySpark SQL의 경우 SQL 질의를 사용하여 간단한 데이터 분석 및 처리 작업을 수행하고, 대용량 데이터의 복잡한 변환 및 조작이 필요한 경우 DataFrame API를 사용하는 것이 일반적이다.
(sql쿼리의 유지보수가 힘들다는 단점이 존재하기 때문에 대용량의 데이터를 처리할 때는 DataFrame API를 많이 사용한다.)

profile
코린이

0개의 댓글