728x90
1. PySpark란?
PySpark는 대용량 데이터를 분산 처리할 수 있는 Apache Spark의 Python API이다.
Spark는 Hadoop보다 빠른 메모리 기반 데이터 처리 엔진으로, 데이터 분석, 머신러닝, 실시간 데이터 처리 등에 널리 사용된다.
PySpark의 주요 특징
- 빠른 데이터 처리: In-Memory(메모리 내) 연산을 지원해 속도가 빠름
- 확장성: 클러스터를 활용해 데이터 병렬 처리 가능
- 유연한 인터페이스: SQL, DataFrame, RDD, 머신러닝 등 다양한 기능 제공
2. PySpark 설치 및 환경 설정
PySpark 설치 방법
터미널이나 CMD에서 아래 명령어 실행:
pip install pyspark
pip install findspark # Jupyter Notebook 사용 시 필요
java -version
3. PySpark 기본 설정: SparkSession 만들기
PySpark를 사용하려면 SparkSession 객체를 생성해야 한다.
SparkSession은 PySpark의 핵심 엔진 역할을 하며, 데이터 처리를 위한 SQL, DataFrame, RDD API를 제공한다.
from pyspark.sql import SparkSession
# SparkSession 생성
spark = SparkSession.builder.appName("MyApp").getOrCreate()
# 기본 정보 확인
print(spark)
- appName("MyApp"): 실행되는 Spark 애플리케이션의 이름
- getOrCreate(): 기존 세션이 없으면 새로 만들고, 있으면 기존 세션을 가져옴
4. 데이터 불러오기: CSV 파일 읽기
SparkSession을 만든 후 데이터를 불러올 수 있다. Spark는 다양한 포맷(CSV, JSON, Parquet 등)의 데이터를 읽을 수 있다.
CSV 파일을 DataFrame으로 로드
df = spark.read.csv("data.csv", header=True, inferSchema=True)
df.show(5) # 상위 5개 행 출력
- header=True: CSV의 첫 번째 줄을 컬럼 이름으로 사용
- inferSchema=True: 자동으로 데이터 타입 추론 (숫자는 Integer, 문자열은 String으로 변환)
df_json = spark.read.json("data.json")
df_parquet = spark.read.parquet("data.parquet")
5. 데이터 구조 확인하기
df.printSchema() # 데이터 타입 확인
root
|-- id: integer (nullable = true)
|-- name: string (nullable = true)
|-- age: integer (nullable = true)
df.columns # 컬럼 이름 리스트 출력
df.describe().show() # 기본 통계 요약
6. PySpark 실행 환경 설정 (로컬 or 클러스터)
PySpark는 로컬 환경에서도 실행할 수 있고, 클러스터에서 확장할 수도 있다.
- 로컬 실행 (개발 및 테스트용)
spark = SparkSession.builder.master("local[*]").appName("LocalSpark").getOrCreate()
- 클러스터 실행 (Spark Standalone, YARN, Mesos 등)
spark = SparkSession.builder.master("spark://<master-node-ip>:7077").appName("ClusterSpark").getOrCreate()
로컬 실행 시 local[*]는 모든 CPU 코어를 사용한다는 의미이다.
7. PySpark 종료 (세션 닫기)
작업이 끝나면 리소스를 정리하기 위해 SparkSession을 종료하는 게 좋다.
spark.stop()
반응형
'Programming (프로그래밍) > Python' 카테고리의 다른 글
[NumPy] NumPy 배열의 인덱싱과 슬라이싱 (0) | 2025.01.28 |
---|---|
[NumPy] NumPy 배열의 모양 변경하기 (Reshaping) (0) | 2025.01.28 |
[NumPy] 배열의 유용한 메서드 (0) | 2025.01.24 |
[NumPy] NumPy에서 랜덤 숫자 생성하기 (0) | 2025.01.23 |
[NumPy] NumPy로 배열을 생성하는 방법 (0) | 2025.01.22 |