[TIL Day51] Big Data: SparkSQL을 이용한 데이터 분석

이다혜·2021년 7월 21일
0

TIL

목록 보기
53/60

SparkSQL이란?

구조화된 데이터 처리를 위한 Spark 모듈

  • 특징
    - 대화형 Spark 셸이 제공됨
    - 하둡 상의 데이터를 기반으로 작성된 Hive 쿼리의 경우 변경없이 최대 100배까지 빠른 성능을 가능하게 해줌
    - 데이터프레임을 SQL로 처리 가능

    • RDD 데이터는 데이터프레임으로 변환한 후 처리 가능
    • 외부 데이터(스토리지, 관계형 데이터베이스)는 데이터프레임으로 변환한 후 처리 가능
    • 데이터프레임은 테이블이 되고 (특정 함수 사용) 그 다음부터 SQL 함수를 사용 가능
  • SparkSQL 사용법: 외부 데이터베이스 연결
    SparkSession의 read 함수를 사용하여 테이블 혹은 SQL 결과를 데이터프레임으로 읽어온다.

Redshift 연결 예제

  1. SparkSession을 만들 때 외부 데이터베이스에 맞는 JDBC jar를 지정
from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.jars", "/usr/local/lib/python3.6/dist-packages/pyspark/jars/RedshiftJDBC42-no-awssdk-1.2.20.1043.jar") \
    .getOrCreate()
  1. SparkSession의 read 함수 호출
    • 로그인 관련 정보와 읽어오고자 하는 테이블 혹은 SQL을 지정
    • 결과가 데이터프레임으로 리턴됨
 df_user_session_channel = spark.read \
    .format("jdbc") \
    .option("driver", "com.amazon.redshift.jdbc42.Driver") \
    .option("url", "jdbc:redshift://learnde.cduaw970ssvt.ap-northeast-2.redshift.amazonaws.com:5439/prod?user=guest&password=Guest1!*") \
    .option("dbtable", "raw_data.user_session_channel") \
    .load()
  1. 앞서 리턴된 데이터프레임에 테이블 이름 지정
    • 데이터프레임을 기반으로 테이블 뷰 생성: 테이블이 만들어짐
    • createOrReplaceTempView: sparkSession이 살아있는 동안 존재
    • createGlobalTempView: Spark 드라이버가 살아있는 동안 존재
  2. SparkSession의 SQL 함수를 사용
    • SparkSession의 SQL 함수로 SQL 결과를 데이터프레임으로 받음
namegender_df.createOrReplaceTempView("namegender")
namegender_group_df = spark.sql("
    SELECT gender, count(1) FROM namegender GROUP BY 1
")
print(namegender_group_df.collect())
profile
하루하루 성장중

0개의 댓글