Data Engineering/Spark

[Spark] 스파크 간단 스터디 2

쟈누이 2021. 6. 27. 18:05
반응형

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 매서드는 여러 로우를 보기 좋게 출력한다.
반응형