Spark Session 생성
- Spark 프로그램의 시작은 SparkSession을 만드는 것
- 프로그램마다 하나를 만들어 Spark Cluster와 통신: Singleton 객체
- Spark 2.0에서 처음 소개됨
- Spark Session을 통해 Spark이 제공해주는 다양한 기능을 사용
- DataFrame, SQL, Streaming, ML API 모두 이 객체로 통신
- config 메소드를 이용해 다양한 환경설정 가능 (단계별로 하나씩 설정도 가능)
- 단 RDD와 관련된 작업을 할때는 SparkSession 밑의 sparkContext 객체를 사용
- Spark Session API Document : https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.SparkSession.html
Spark Session 생성 예제
- Spark 2.0이 나오면서 SparkSession 이 처음으로 소개되었고, Dataframe&Dataset&Sql이 sparksql엔진 위에서 돌아가는 것으로 변경되었기에, Sparksession도 pyspark.sql안에 위치하게됨.
- master("local[*]") : resource Manager 지정 : Local을 활용, [*]은 CPU(thread)수를 지정
- appName('PySpark Tutorial') : spark 프로그램의 이름을 지정
- getOrCreate() : spark session의 싱클턴 오브젝트(한 프로그램에 하나만 있으면 됨)
from pyspark.sql import SparkSession #Spark SQL Engine이 중심으로 동착함
# SparkSession은 싱글턴
spark = SparkSession.builder\
.master("local[*]")\ # resource Manager 지정 : Local을 활용, [*]은 CPU(thread)수를 지정
.appName('PySpark Tutorial')\ #spark 프로그램의 이름을 지정
.getOrCreate() #spark session의 싱클턴 오브젝트(한 프로그램에 하나만 있으면 됨)
…
spark.stop()
pyspark.sql 제공 주요 기능
- pyspark.sql.SparkSession
- pyspark.sql.DataFrame
- pyspark.sql.Column
- pyspark.sql.Row
- pyspark.sql.functions
- pyspark.sql.types
- pyspark.sql.Window
Spark Session 환경 변수
- Spark Session을 만들 때 다양한 환경 설정이 가능
- 몇 가지 예
- executor별 메모리: spark.executor.memory (기본값: 1G)
- executor별 CPU수: spark.executor.cores (YARN에서는 기본값 1)
- driver 메모리: spark.driver.memory (기본값: 1G)
- Shuffle후 Partition의 수: spark.sql.shuffle.partitions (기본값: 최대 200)
- 가능한 모든 환경변수 옵션은 여기에서 찾을 수 있음
- 사용하는 Resource Manager에 따라 환경변수가 많이 달라짐
Spark Session 환경 변수 설정방법
- 환경변수 (Spark Cluster Admin 이 관리)
- $SPARK_HOME/conf/spark_defaults.conf (Spark Cluster Admin 이 관리)
- spark-submit 명령의 커맨드라인 파라미터
- SparkSession 만들때 지정
- SparkConf
- 충돌시 우선순위는 숫자가 클수록 우선순위임.
- 환경설정 방법(1)
- 아래 시점의 Spark Configuration은 앞서 언급한 환경변수와 spark_defaults.conf와 spark-submit로 들어온 환경설정이 우선순위를 고려한 상태로 정리된 상태이며, 그 위에서 새로운 환경을 overwrite하는 것임
from pyspark.sql import SparkSession
# SparkSession은 싱글턴
spark = SparkSession.builder\
.master("local[*]")\
.appName('PySpark Tutorial')\
.config("spark.some.config.option1", "some-value") \
.config("spark.some.config.option2", "some-value") \
.getOrCreate()
- 환경설정 방법(2)
- SparkConf라는 오브젝트를 만들어서 거기에 환경을 설정하고, 한번에 Sparksession에 넘겨줌
- SparkConf를 만드는 방법은, 개체를 만든다음, set라는 메소드를 이용하여 환경변수 이름과 값을 지정
from pyspark.sql import SparkSession
from pyspark import SparkConf
conf = SparkConf() #개체를 만들고
conf.set("spark.app.name", "PySpark Tutorial") # 환경변수의 이름과 값을 지정
conf.set("spark.master", "local[*]")
# SparkSession은 싱글턴
spark = SparkSession.builder\
.config(conf=conf) \
.getOrCreate()
SparkSession Flow
- Spark 세션(SparkSession)을 만들기
- 입력 데이터 로딩
- 데이터 조작 작업 (판다스와 아주 흡사)
- DataFrame API나 Spark SQL을 사용
- 원하는 결과가 나올때까지 새로운 DataFrame을 생성
- 최종 결과 저장
Spark Session이 지원하는 데이터 소스
- spark.read(DataFrameReader)를 사용하여 데이터프레임으로 로드
- DataFrame.write(DataFrameWriter)을 사용하여 데이터프레임을 저장
- 많이 사용되는 데이터 소스들
- HDFS 파일
- CSV, JSON, Parquet, ORC, Text, Avro
- Parquet/ORC/Avro
- Hive 테이블
- JDBC 관계형 데이터베이스
- 클라우드 기반 데이터 시스템
- 스트리밍 시스템
- HDFS 파일
위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 듣고 정리한 내용입니다
728x90
반응형