터칭 데이터
Spark SQL 소개 본문
Contents
1. Spark SQL 소개
2. Aggregation, JOIN, UDF
3. Spark SQL 실습
4. Hive 메타스토어 사용하기
5. 유닛 테스트
Spark SQL 소개
Spark SQL과 Spark DataFrame의 차이점
Spark SQL의 일반적인 사용법 이해
처음에 맵리듀스가 등장할 때는 SQL이 필요가 없다고 생각했지만 생산성이 떨어지며 다시 SQL을 중시
SQL은 빅데이터 세상에서도 중요!
데이터 분야에서 일하고자 하면 반드시 익혀야할 기본 기술
구조화된 데이터를 다루는한 SQL은 데이터 규모와 상관없이 쓰임
모든 대용량 데이터 웨어하우스는 SQL 기반
Redshift, Snowflake, BigQuery
Hive/Presto
Spark도 예외는 아님
Spark SQL이 지원됨
Spark SQL이란?
Spark SQL은 구조화된 데이터 처리를 위한 Spark 모듈
데이터 프레임 작업을 SQL로 처리 가능
데이터프레임에 테이블 이름 지정 후 sql함수 사용가능
- 판다스에도 pandasql 모듈의 sqldf 함수를 이용하는 동일한 패턴 존재
HQL(Hive Query Language)과 호환 제공
- Hive 테이블들을 읽고 쓸 수 있음 (Hive Metastore)
Spark SQL vs. DataFrame
SQL로 가능한 작업이라면 DataFrame을 사용할 이유가 없음
하지만 Spark SQL 결과는 DataFrame으로 리턴되므로
두 개를 동시에 사용할 수 있다는 점 분명히 기억
Spark SQL의 DataFrame 대한 비교 우위
1. Familiarity/Readability
SQL이 가독성이 더 좋고 더 많은 사람들이 사용가능
2. Optimization
Spark SQL 엔진이 최적화하기 더 좋음 (SQL은 Declarative)
- Catalyst Optimizer와 Project Tungsten
3. Interoperability/Data Management
SQL이 포팅도 쉽고 접근권한 체크도 쉬움
Spark SQL 사용법 - SQL 사용 방법
데이터 프레임을 기반으로 테이블 뷰 생성: 테이블이 만들어짐
createOrReplaceTempView: spark Session이 살아있는 동안 존재
createOrReplaceGlobalTempView: Spark 드라이버가 살아있는 동안 존재
Spark Session의 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())
SparkSession 사용 외부 데이터베이스 연결
Spark Session의 read 함수를 호출(로그인 관련 정보와 읽어오고자 하는 테이블 혹은 SQL을 지정). 결과가 데이터 프레임으로 리턴됨
df_user_session_channel = spark.read \
.format("jdbc") \
.option("driver", "com.amazon.redshift.jdbc42.Driver") \
.option("url", "jdbc:redshift://HOST:PORT/DB?user=ID&password=PASSWORD") \
.option("dbtable", "raw_data.user_session_channel") \
.load()
붉은색 밑줄의 raw_data.user_session_channel이 SELECT 등의 SQL 구문의 대상이 됩니다.
'하둡과 Spark' 카테고리의 다른 글
UDF(User Defined Function) (0) | 2024.01.18 |
---|---|
Aggregation - JOIN (0) | 2024.01.18 |
Intro (0) | 2024.01.18 |
요약 (0) | 2024.01.18 |
Spark DataFrame 실습 4 (0) | 2024.01.18 |