앞선 포스팅으로 Pyspark의 DataFrame Method를 통해 DataFrame을 다루는 법 코드들에 대해 정리했다. spark는 SQL도 지원해줘서 Pyspark에서도 sql처럼 DataFrame을 다룰 수 있는데, 오늘 포스팅에선 해당 방법에 대해 적어보겠다. SQL이 내집처럼 편안한 나에겐 너무너무 소중한 기능이다. 근데 어렵지도 않다! 렛쯔고
(2024-04 +) pyspark로 실제로 데이터 분석을 하게 되니 그냥 위에 Method 사용이 더 편하다 ㅎㅎ;;
데이터 셋은 1탄과 마찬가지로 이번에도 이걸 사용해 줄 것이다.
👇 예제 데이터 👇
https://www.kaggle.com/datasets/mansoordaku/ckdisease
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핸들링 끝!
'스파크 Spark' 카테고리의 다른 글
[Spark] Pyspark 데이터 전처리 단골 코드 (Pyspark Method ver.) (0) | 2024.04.26 |
---|---|
[Spark] 원격 주피터 허브에서 로컬 Spark 세션 및 hdfs 불러오기 (0) | 2024.04.17 |
[Spark] 우분투(Ubuntu)에서 하둡(Hadoop)위에 Spark(스파크)를 올리고, jupyter notebook으로 열기 (2) | 2024.03.29 |
[Spark] Pyspark DataFrame Method 정리 (0) | 2024.02.20 |
[Spark] Apache Spark란? (0) | 2024.02.19 |
댓글