데이터/Spark

[Spark] 3. Spark SQL

김줘 2024. 12. 2. 23:53

Spark SQL

  • 구조화된 데이터 처리를 위한 Spark 모듈
  • DataFrame 작업을 SQL로 처리 가능
    • DataFrame에 테이블 명 지정 후 SQL 함수 사용 가능
      • pandas에도 pandasql 모듈의 sqldf 함수를 이용하는 동일한 패턴 존재
    • HQL(Hive Query Language)과 호환 제공
      • Hive 테이블을 읽고 쓸 수 있음 (Hive Metastore)

Spark SQL vs. DataFrame

  • SQL로 가능한 작업은 굳이 DataFrame을 사용할 이유 X!
    • 두 기술을 혼합해서 사용 가능!
  • Spark SQL이 갖는 장점
    • 가독성과 사용 친화성
    • Spark SQL 엔진이 최적화에 유리!
    • DataFrame에 비해 포팅이 쉽고 접근 권한 체크도 유리!

Spark SQL 사용법

namegender_df.createOrReplaceTempView("namegender") namegender_group_df = spark.sql("""
SELECT gender, count(1) FROM namegender GROUP BY 1 """)
print(namegender_group_df.collect())
  • DataFrame을 기반으로 테이블 뷰 생성
    • createOrReplaceTempView : Spark Session이 살아있는 동안 존재
    • createOrReplaceGlobalTempView : Spark 드라이버가 살아있는 동안 존재
  • Spark Session의 sql 함수로 SQL 결과를 DataFrame으로 받음

Spark Session 사용 외부 데이터베이스 연결

  • Spark Session의 read 함수 호출
  • 결과를 데이터 프레임으로 리턴
  • 예시
df_user_session_channel = spark.read \
.format("jdbc") \
.option("driver", "com.amazon.redshift.Driver") \
.option("url", "jdbc:redshift://HOST:PORT/DB?user=ID&password=PASSWORD") \ .option("dbtable", "raw_data.user_session_channel") \
.load()