스파크 Spark

[Spark] Pyspark spark sql 사용하기

sseozytank 2024. 2. 20.
 

[Spark] Pyspark DataFrame Method 정리

데이터 분석가가 Pyspark를 쓰는 이유라하면, 역시 대용량의 데이터를 효율적으로 처리하기 위함이다. Pyspark는 pandas 같은 문법으로도, SQL같은 문법으로도 활용이 가능하다해서 데이터 가공을 여

sseozytank.tistory.com

앞선 포스팅으로 Pyspark의 DataFrame Method를 통해 DataFrame을 다루는 법 코드들에 대해 정리했다. spark는 SQL도 지원해줘서 Pyspark에서도 sql처럼 DataFrame을 다룰 수 있는데, 오늘 포스팅에선 해당 방법에 대해 적어보겠다. SQL이 내집처럼 편안한 나에겐 너무너무 소중한 기능이다. 근데 어렵지도 않다! 렛쯔고 

 

(2024-04 +)  pyspark로 실제로 데이터 분석을 하게 되니 그냥 위에 Method 사용이 더 편하다 ㅎㅎ;;  

 

데이터 셋은 1탄과 마찬가지로 이번에도 이걸 사용해 줄 것이다.  

 

👇 예제 데이터 👇

https://www.kaggle.com/datasets/mansoordaku/ckdisease

total_first_victory_df.csv
1.15MB

 

0.라이브러리 불러오기

import pyspark
import pandas as pd
from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf

 

1.스파크 세션 연결 및 데이터 불러오기 

spark = SparkSession.builder.master("local[1]").appName("kidney_disease").getOrCreate()
data = spark.read.option("header", True).csv("kidney_disease.csv")
data.show(5)

 

2.sql을 사용하기 위해 view 만들어주기 

#DataFrame.CreateOrReplaceTempView('테이블명')
data.createOrReplaceTempView('data_table')

이렇게 설정해주면, sql을 사용할 때 data_table이라는 테이블 명에서 자유롭게 사용해주면 되는 것이당. 

준비는 끝! 

 

이거 꼭 해야하나요? 

해야합니당. 이 작업이 있어야만 DataFrame을 일시적은 뷰로 만들어 줘서 SQL 쿼리를 이용해 DataFrame을 다룰 수 있게 됩죵. 함수 그대로 TempView이기 때문에 Spark 세션이 유지되는 동안에만 해당 뷰에 접근 가능 

 

3.끝. SQL 처럼 사용해보자 

위 처럼 임시테이블로 선언해주면 data_table이라는 테이블이 생긴다고 보면 된다. 그럼 그냥 쿼리치듯이 작성하면 되는데, 기본 틀은 아래와 같다. 

#짧은 문장일 때
spark.sql("쿼리").show()

#여러 줄로 나눠 쓰고 싶을 때
spark.sql("""쿼리
             쿼리
             쿼리""").show()

 

사용 예시 | (1) al이 null값이 아닌 데이터 중 al 별 pc의 count 

spark.sql("""
    SELECT al,
           COUNT(al) AS al_cnt 
      FROM data_table 
     WHERE al IS NOT NULL 
     GROUP BY 1
     ORDER BY 1 
""").show()

 

 

사용 예시 | (2) 데이터를 나눠서 그 두개 데이터를 join해보자.

data_a=data.select("id","age")
data_b=data.select("id","bp","sg","al")
data_a=data_a.filter(data_a.id.isin(['1','2','3','5','7','9','10']))
data_b=data_b.filter(data_a.id.isin(['2','3','5','6','8','10','11']))

data_a.createOrReplaceTempView('data_a_table')
data_b.createOrReplaceTempView('data_b_table')


spark.sql("""
    SELECT *
      FROM data_a_table a
        JOIN data_b_table b ON a.id=b.id
""").show()

 

이것저것 쿼리를 쳐봤는데 문법이 MySQL과 거의 비슷한 것 같다. 내가 아는 선에서 쳤을 때 딱히 오류나는 문법은 없었음. SQL을 아는 사람이라면 따로 공부할 필요는 없을 것 같고 오류날 때마다 GPT에서 물어봐도 괜찮을 것 같다. 

 

spark sql의 DataFrame핸들링 끝! 

댓글