프로그래밍/Spark

[Spark] sql + 데이터프레임 읽고 쓰기

장경훈 2022. 11. 17. 14:33
이 포스팅은 ⟪러닝 스파크(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.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