반응형
1. 스파크 운영용 애플리케이션
Spark-submit 명령을 사용해 대화형 셀에서 개발한 프로그램을 운영용 애플리케이션으로 쉽게 전환 가능
해당 명령은 애플리케이션 코드를 클러스터에 전송해 실행시키는 역할
2. Dataset
- 타입 안정성을 제공하는 구조적 api
- 정적 타입 코드를 지원하기 위해 고안된 스파크의 구조적 api
- 타입안정성을 지원하며 동적 타입 언어인 파이썬과 R 에선 사용 불가
3. 구조적 스트리밍
- 스트림 처리용 고수준 api
- 배치모드의 연산을 스트리밍 방식으로 실행할 수 있으며, 지연 시간을 줄이고 증분 처리할 수 있음
- 배치 처리용 코드를 일부 수정하여 스트리밍 처리를 수행하고 값을 빠르게 얻을 수 있는 장점 존재
- 스트리밍은 트리거가 실행된 다음 데이터를 갱신하게될 인메모리 테이블에 데이터를 저장
- 스트리밍의 단점을 구조적 스트리밍으로 보완 가능
4. 구조적 api 개요(4장)
- 배치와 스트리밍 처리에서 구조적 api 를 사용할 수 있음
- 구조적 api 를 활용하면 배치 작업을 스트리밍 작업으로 손쉽게 변환할 수 있음
1) Dataframe 과 dataset
- 결과를 생성하기 위해 어떤 데이터에 어떤 연산을 적용해야 하는지 정의하는 지연 연산의 실행 계획이며, 불변성을 가짐
- 이를 조금 더 구체적으로 정의하려면 스키마를 함부로 알아야 한다.
2) 스키마
- 스키마는 데이터프레임의 컬럼명과 데이터 타입을 정의함
- 데이터소스에서 얻거나 직접 정의할 수 있음
3) 스파크의 구조적 데이터 타입 개요
- 실행 계획 수립과 처리에 사용하는 자체 데이터타입 정보를 가지고 있는 카탈리스트 엔진을 사용
- 카탈리스트 엔진은 다양한 실행 최적화 기능을 제공
- 자체 데이터 타입을 지원하는 여러 언어 api 와 직접 매핑, 각언어에 대한 매핑 테이블이 있음
- 데이터 프레임은 스키마에 명시된 데이터 타입의 일치 여부를 런타임이 되어서야 확인
- 데이터셋은 스키마에 명시된 데이터 타입의 일치여부를 컴파일 타임에 확인
- 데이터 프레임을 사용하면 스파크의 최적화된 내부 포맷을 사용할 수 있음
4) 구조적 api 의 실행 과정
- 데이터프레임/sql/데이터 셋 을 이용해 코드 작성
- 스파크가 논리적 실행계획으로 변환
- 논리적 실행 계획 -> 물리적 실행계획으로 변환
- 클러스터에서 물리적 실행 계획(RDD 처리) 를 실행
5. 구조적 API 기본 연산
데이터 프레임은 ROW 타입의 레코드와 각 레코드에 수행할 연산 표현식을 나타내는 여러 컬럼으로 구성
스키마는 각 컬럼명과 데이터 타입을 정의하며, 에이터프레임의 파티셔닝은 데이터프레임이나 데이터셋이 클러스터에서 물리적으로 배치되는 형태를 정의한다. 파티셔닝 스키마는 파티션을 배치하는 방법을 정의
1) 스키마
- 데이터프레임의 컬럼명과 데이터 타입을 정의함
- ETL 작업에 스파크를 사용하면 직접 스키마를 정의해야 함
- 컬럼과 관련된 메타 데이터를 지정할 수 있음.
2) 컬럼과 표현식
- 스파크의 컬럼은 R, 판다스의 데이터 프레임 컬럼과 유사, 표현식으로 데이터프레임의 컬럼을 선택, 조작, 제거할 수 있다
- 컬럼 생성에는 col 함수나 column 함수를 사용하며, col 매서드를 사용해 명시적으로 컬럼을 정의하면 스파크는 분석기 실행 단계에서 컬럼 확인 절차를 생략함
- 표현식은 데이터 프레임 레코드의 여러값에 대한 트랜스포메이션 집합을 의미함
- 컬럼은 단지 표현식일 뿐이며, 컬럼과 컬럼의 트렌스포메이션은 파싱된 표현식과 동일한 논리적 실행 계획으로 컴파일된다.
- PrintSchema 메서드로 데이터 프레임의 전체 컬럼 정보 확인 가능, 프로그래밍 방식으로 컬럼에 접근시, 데이터프레임의 columns 속성 사용
3) 레코드와 로우
- 데이터프레임의 각 로우는 하나의 레코드, 레코드를 row 객체로 표현
- 값을 생성하기 위해 컬럼 표현식으로 row 객체를 다룸
- 컬럼에 해당하는 값을 사용해 row 객체 생성가능, 스키마 정보를 가지고 있지 않음
- SelectExpr 메서드를 사용하면 데이터프레임에서도 sql 사용 가능
- WithColumn 메서드는 신규 컬럼을 추가하는 방법, 두가지의 인수 사용하는데 하나는 컬럼명이고, 다른 하나는 값을 생성할 표현식임
- WithColumnRenamed 메서드로 컬럼명을 변경할 수 있음
- 컬럼 제거에는 drop 메서드를 사용함
- 데이터 타입 변경에는 cast 메서드를 사용
- Where, filter 메서드로 필터링이 가능
- Distinct 메서드를 사용해 중복 데이터가 제거된 고유값을 찾을 수 있음
- 무작위 샘플데이터를 얻으려면 sample 메서드를 사용
- Sort 와 orderBy 메서드를 사용해 최대값 혹은 최소값이 상단에 위치하도록 정렬 가능
- Limit 매서드를 사용해 추출할 로우 수를 제한할 수 있음
- Repartition 매서드를 호출하면 무조건 전체 데이터를 셔플한다.
- Collect 메서드는 전체 데이터 프레임의 모든 데이터를 수집하며, take 메서드는 상위 N 개의 로우를 반환하고, show 매서드는 여러 로우를 보기 좋게 출력한다.
반응형
'Data Engineering > Spark' 카테고리의 다른 글
[ Spark ] 스파크 간단 스터디 6 (0) | 2021.07.18 |
---|---|
[ Spark ] 스파크 간단 스터디 5 (2) | 2021.07.11 |
[ Spark ] 스파크 간단 스터디 4 (0) | 2021.07.09 |
[Spark] 스파크 간단 스터디 3 (0) | 2021.07.07 |
[Spark] 스파크에 대한 간단 스터디 1 (0) | 2021.06.19 |