터칭 데이터

Spark SQL 소개 본문

하둡과 Spark

Spark SQL 소개

터칭 데이터 2024. 1. 18. 12:26

 

 

 

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