1. PySpark의 SQL vs DataFrame API
- 사용자가 SQL이나 DataFrame으로 로직을 작성
- Spark가 실제 코드를 실행하기 전에 그 로직을 기본 실행 계획으로 컴파일
- Spark SQL 사용을 위해 DataFrame을 테이블이나 뷰로 등록 필요
Spark SQL에서 직접 쿼리를 수행하는 것과 DataFrame API를 사용하는 것 중, 어느 것이 성능 상 더 효율적일까?
df_parquet.createOrReplaceTempView('sql_df')
sql1 = spark.sql('''
select *
from parquet_sql
where City = 'MAXWELL'
''')
sql1.explain()
df_parquet.filter(F.col("City")=="MAXWELL").explain()
%%time
sql1.count()
%%time
df_parquet.filter(F.col("City")=="MAXWELL").count()
처리 로직도 완벽히 동일하며, 실행 속도도 거의 차이가 나지 않는다.
1.1 두 방식의 장단점
- Spark SQL
- 장점: 문자열 형태의 쿼리로 읽기 쉬움
- 단점: 쿼리에 대한 유지보수가 어려움 (문자열 형태의 query)
- DataFrame API
- 장점: code의 모듈화 (효율성이 높음)
- 단점: 로직이 복잡할 경우 이해하기 어려울 수도 있음
DataFrame API 선호하는 이유
- spark를 다루는 경우는 보통 대용량 데이터 처리를 위해서
- 대용량 데이터의 경우 low level(전처리가 되지않는 로그 데이터)의 데이터가 많음
- 따라서, 지속적으로 로그 형태가 변하거나 비즈니스 로직이 변화함에 따라 코드 역시 변화
- 위에서 이야기했던 sql 쿼리의 유지보수가 힘들다는 단점이 크리티컬
- Dataframe api를 활용해 모듈화 및 버전 관리를 하는 경우가 많음
- 본인의 경우 sql 쿼리는 보통 단건 분석을 진행을 할 때 사용
- e.g., 이번 분기 매출을 뽑아서 알려주세요