일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- django
- 코딩 테스트
- 데이터 시각화
- HTML
- beuatifulsoup
- 코딩테스트
- Til
- PCCP
- 코테 연습
- 슈퍼셋
- SQL
- Tableau
- AWS
- Snowflake
- cloud platform
- GCP
- Kafka
- Selenium
- Spark
- 팀 프로젝트
- 데브코스
- superset
- VPC
- 데이터 엔지니어
- airflow
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
데이터 엔지니어링 58일차 TIL 본문
학습 내용
Spark SQL이란?
- Spark SQL은 구조화된 데이터 처리를 위한 Spark모듈
- 데이터 프레임 작업을 SQL로 처리 가능
- 데이터프레임에 테이블 이름 지정 후 sql함수 사용가능
- 판다스에도 pandasql모듈의 sqldf 함수를 이용하는 동일한 패턴 존재
- HQL(Hive Query Language)과 호환제공
- Hive 테이블들을 읽고 쓸 수 있다.(Hive Metastore)
Spark SLQ 사용법
1. 데이터 프레임을 기반으로 테이블 뷰 생성
- createOrReplaceTempView : spark Session이 살아있는 동안 존재
- createOrReplaceGlobalTempView : Spark 드라이버가 살아있는 동안 존재
- Spark Session의 sql 함수로 SQL결과를 데이터 프레임으로 받는다.
Aggregation함수
- Group by : sum, min, max, avg, count 등
- Window : row_number, first_value, last_value 등
- Rank 함수
UDF(User Defined Function)
- 데이터프레임의 경우 .withColumn 함수와 같이 사용하는 것이 일반적
- Spark SQL에서도 사용 가능하다.
- Aggregation용 UDAF(User Defined Aggregation Function)도 존재
- Group by 에서 사용되는 Sum, AVG와 같은 함수를 만드는 것
- PySpark에서 지원되지 않음. (Scalar 나 Java를 사용해야한다.)
중복확인 코드
spark.sql("""SELECT sessionid, COUNT(1) count
FROM user_session_channel
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1""").show()
=>Groupby 를 사용하여 갯수를 세었을때 1개가 넘는다면 중복되는 데이터가 존재한다.
Spark 데이터베이스와 테이블
- 카탈로그 : 테이블과 뷰에 관한 메타데이터 관리
- 기본으로 메모리 기반 카탈로그 제공 - 세션이 끝나면 사라짐
- Hive와 호환되는 카탈로그 제공 - Persistent
- 테이블 관리 방식
- 테이블들은 데이터베이스라 부르는 폴더와 같은 구조로 관리(2단계)
- 메모리 기반 테이블/뷰 : 임시 테이블을 만들어 사용
- 스토리지 기반 테이블
- 기본적으로 HDFS와 Parquet 포맷을 사용
- Hive와 호환되는 메타스토어 사용
- 두 종류의 테이블이 존재(Hive와 동일한 개념)
- Managed Table : Spark이 실제 데이터와 메타데이터 모두 관리
- Unmanaged(External) Table : Spark이 메타 데이터만 관리
Spark SQL - Managed Table사용
- 테이블 생성방법 두가지
- dataframe.saveAsTable("테이블이름")
- SQL문법 사용(CRETAE TABEL , CTAS)
- spark.sql.warehouse.dir가 가리키는 위치에 데이터가 저장된다.
- PARQUET이 기본데이터 포맷
- 선호하는 테이블타입
- Spark테이블로 처리하는 것의 장점(파일로 저장하는 것과 비교시)
- JDBC/ODBC등으로 Spark을 연결해서 접근 가능하다(태블로, 파워BI)
유닛테스트란?
- 코드 상의 특정기능(보통 메소드의 형태)를 테스트하기 위해 작성된 코드
- 정해진 입력을 주고 예상된 출력이 나오는지 형태로 테스트
- CI/CD를 사용하려면 전체 코드의 테스트 커버리지가 굉장히 중요해짐
- 각 언어별로 정해진 테스트 프레임웍을 사용하는 것이 일반적이다.
- JUnit for Java
- NUnit for .NET
- unittest for python
'데브코스' 카테고리의 다른 글
데이터 엔지니어링 60일차 TIL (0) | 2024.06.30 |
---|---|
데이터 엔지니어링 59일차 TIL (0) | 2024.06.30 |
데이터 엔지니어링 57일차 TIL (0) | 2024.06.30 |
데이터 엔지니어링 56일차 TIL (0) | 2024.06.17 |
데이터 엔지니어링 55일차 TIL (1) | 2024.06.07 |