카탈로그
- 테이블과 뷰에 관한 메타 데이터 관리
- 메타 데이터 : 데이터에 관한 구조화된 데이터, 다른 데이터를 설명해 주는 데이터이다.
- 기본으로 메모리 기반 카탈로그 제공 - 세션이 끝나면 사라짐
- Hive와 호환되는 카탈로그 제공 - Persistent
테이블 관리 방식
- 테이블들은 데이터베이스라 부르는 폴더와 같은 구조로 관리 (2단계)
- 메모리 기반 테이블/뷰
- 임시 테이블
- 스토리지 기반 테이블
- 기본적으로 HDFS와 Parquet 포맷을 사용
- Hive와 호환되는 메타스토어 사용
- 두 종류의 테이블이 존재 (Hive와 동일한 개념)
- Managed Table
- Spark이 실제 데이터와 메타 데이터 모두 관리
- Unmanaged (External) Table
- Spark이 메타 데이터만 관리
- Managed Table
Spark SQL 스토리지 기반 카탈로그 사용 방법
- Hive와 호환되는 메타스토어 사용
- SparkSession 생성시 enableHiveSupport() 호출
- 기본으로 “default”라는 이름의 데이터베이스 생성
1. SparkSession 생성 및 데이터 호출
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark Hive") \
.enableHiveSupport() \
.getOrCreate()
# Read in data and create a DataFrame
df = spark.read.csv("orders.csv", inferSchema=True, header=True, sep ='\t')
df.show(5)
2. 데이터베이스 생성
spark.sql("CREATE DATABASE IF NOT EXISTS TEST_DB")
spark.sql("USE TEST_DB") # Default Database는 위에서 만든 TEST_DB 라는 의미
3 .데이터 베이스 확인
- 기본으로 “default”라는 이름의 데이터베이스와 위에서 만든 test_db를 확인할 수 있다.
spark.sql("SHOW DATABASES").show()
Spark SQL - Managed Table
- 테이블 생성방법
- dataframe.saveAsTable("테이블이름")
- SQL 문법 사용 (CREATE TABLE, CTAS)
- spark.sql.warehouse.dir가 가리키는 위치에 데이터가 저장됨
- PARQUET이 기본 데이터 포맷
- 가능하면 Managed Table을 사용하는 것이 좋음
- Spark 테이블로 처리하는 것의 장점 (파일로 저장하는 것과 비교시)
- JDBC/ODBC등으로 Spark을 연결해서 접근 가능 (태블로, 파워BI)
Managed Table 생성하는 방법
1-1. pyspark로 테이블 만드는 방법
df.write.saveAsTable("TEST_DB.orders", mode="overwrite") # pyspark
1-2. SparkSQL로 테이블 만드는 방법
df.createOrReplaceTempView("orders_view")
spark.sql("""
CREATE TABLE TEST_DB.orders
SELECT * FROM orders_view
"""
)
2. 테이블 확인
!ls -tl spark-warehouse/test_db.db/orders/
3. 생성된 데이터 확인
spark.sql("SELECT * FROM TEST_DB.orders").show(5) #sparkSQL로 확인
spark.table("TEST_DB.orders").show(5) #pyspark로 확인
4. spark 카탈로그에 있는 테이블 리스트 확인
spark.catalog.listTables()
Spark SQL - External Table
- 이미 HDFS에 존재하는 데이터에 스키마를 정의해서 사용
- LOCATION이란 프로퍼티 사용 (location이 가르키는 데이터를 기반으로 테이블을 로딩)
- 메타데이터만 카탈로그에 기록됨
- 데이터는 spark가 관리하지 않는 곳에 이미 존재
- External Table은 삭제되어도 데이터는 그대로임
CREATE TABLE table_name ( column1 type1, column2 type2, column3 type3, … )
USING PARQUET LOCATION 'hdfs_path';
위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 듣고 정리한 내용입니다
728x90
반응형
'Spark & Hadoop > Pyspark & SparkSQL' 카테고리의 다른 글
[Pyspark/SparkSQL] UDF(User Defined Function) (사용자 정의 함수) (1) | 2023.10.03 |
---|---|
[SparkSQL] JOIN의 종류 (INNER, LEFT, RIGHT, FULL(OUTER), CROSS, SELF JOIN) (Shuffle JOIN, Broadcast JOIN) (1) | 2023.10.03 |
[SparkSQL] SparkSQL이란 (0) | 2023.10.03 |
[Pyspark] DataFrame Join 및 Unique User Count (0) | 2023.10.02 |
[Pyspark] 특정 기준으로 text 분리(Split/trim), 리스트 형태의 값을 전개(explode), 데이터 정렬 (sort, orderBy) (1) | 2023.10.02 |