대규모 주류 판매 데이터 분석 - PySpark의 SQL vs DataFrame API

dpwl·2024년 6월 15일
0

Data Analysis with SQL

목록 보기
103/120

1. PySpark의 SQL vs DataFrame API

  • 사용자가 SQL이나 DataFrame으로 로직을 작성
    • Spark가 실제 코드를 실행하기 전에 그 로직을 기본 실행 계획으로 컴파일
  • Spark SQL 사용을 위해 DataFrame을 테이블이나 뷰로 등록 필요

Spark SQL에서 직접 쿼리를 수행하는 것과 DataFrame API를 사용하는 것 중, 어느 것이 성능 상 더 효율적일까?

# DataFrame -> 뷰 등록
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., 이번 분기 매출을 뽑아서 알려주세요
profile
거북선통통통통

0개의 댓글