이 포스팅은 ⟪러닝 스파크(2판)⟫(제이펍, 2022년)을 공부하면서 정리한 내용입니다.
*Spark sql
spark에서는 Sparksession을 사용하여 sql을 사용할 수 있다. 예제 코드를 보면 다음과 같다.
from pyspark.sql import SparkSession
spark=(SparkSession
.builder
.appName("sqlExam")
.getOrCreate())
csv_file = "/databricks-datasets/learning-spark-v2/flights/departuredelays.csv"
df= (spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.load(csv_file))
df.createOrReplaceTempView("delay_flights") #임시뷰 생성
앞서 포스팅에서 처럼 SparkSession을 사용하고 데이터 파일을 받아오는 것 까지는 동일하지만 마지막 줄을 보면 createOrReplaceTempView() 함수를 볼 수 있다. 이 부분이 바로 테이블의 뷰를 생성해서 sql처럼 사용할 수 있도록 하는 함수이다.
spark.sql("""SELECT DISTINCT(distance), origin, destination
FROM delay_flights
WHERE distance > 1000
ORDER BY distance DESC""").show(10)
위 코드처럼 spark.sql() 함수 안에 sql쿼리 문을 작성시키면 sql과 같이 다음과 같은 결과가 나온다.
*spark view 생성 방법
df.createOrReplaceTempView("exam") # exam 임시 뷰 생성
df.createOrReplaceGlobalTempView("exam") # exam 전역 임시 뷰 생성
spark에서 임시 뷰와 전역 임시 뷰는 위의 코드로 생성시킬 수 있다. 여기서 전역 임시 뷰와 임시 뷰의 차이는 그냥 임시 뷰 같은 경우에는 단일 SparkSession에 연결되고 전역 임시 뷰는 말 그대로 스파크 애플리케이션 내에 여러 SparkSession에서 볼 수 있다는 것이다.
ex) 동일한 hive 메타 스토어 구성을 공유 안 하는 서로 다른 session을 결합하려 할 때 사용.
* 테이블 메타데이터 확인
#spark 메타데이터 확인코드
from pyspark.sql import SparkSession
spark=(SparkSession
.builder
.appName("sqlExam")
.getOrCreate())
spark.catalog.listDatabases()
spark.catalog.listTables()
spark.catalog.listColumns("exam")
spark는 catalog를 사용해서 저장된 메타데이터에 액세스 할 수 있고 검사할 수 있다.
*데이터 프레임 읽고 쓰기
기본적으로 spark에서 데이터 프레임을 읽고 쓰는 예제를 한번 정리해보면 다음과 같다.
#데이터프레임 읽기
df=spark.read.format("parquet").load(file)
df=spark.readStream.format("parquet").load(file) # 스트림데이터 읽기
#데이터프레임 쓰기
df.write.format("parquet").mode("overwrite").save(location)
위의 코드처럼 읽기 쓰기를 사용할 수 있고 읽거나 쓸 수 있는 파일의 format을 표로 한번 정리해봤다.
format | 특징 |
parquet | 스파크의 기본 데이터 소스이며 최적화와 효율성이 뛰어나다. 또한 Delta Lake의 기본 테이블 형식이다. ETL및 데이터 수집 프로세스에서 사용하는것을 추천 |
json | 구분을 분석하기 쉬운 형식, 단일 다중 라인 모드 모두 스파크에서 지원가능 |
csv | 데이터 및 비즈니스 분석가들 사이에서 널리 사용되는 형식 |
avro | 카프카에서 메시지를 직렬화할 때 사용 json에 대한 매핑, 속도와 효율성과 같은 이점을 제공 |
orc | spark 설정으로 벡터화된 orc리더 사용가능 이 기능을 실행시 한번에 한 행이 아닌 행 블록을 읽어 작업을 간소화, 집중적인 작업에 대한 CPU 사용량 감소 |
image | spark는 머신러닝된 이미지 파일들을 읽을 수 있다 |
이진 파일 | spark 3.0에서부터 이진 파일을 지원한다 |
각각의 format에 대한 옵션은 https://spark.apache.org/docs/latest/sql-data-sources.html 이 링크에서 확인해서 필요할 때마다 사용하면 될 것 같다
'프로그래밍 > Spark' 카테고리의 다른 글
[spark] 캐싱, 영속화, 조인 (0) | 2022.11.23 |
---|---|
[Spark] 스파크 최적화 및 튜닝 (0) | 2022.11.22 |
pyspark mysql 연동 (feat.docker) (0) | 2022.11.21 |
Spark 정형화 api (0) | 2022.11.15 |
Spark 기본 개념 및 용어정리 (0) | 2022.11.14 |