DATABRICKS-Certified-Developer-6
DataFrame Schema 정의 방법 이해하기
DataFrame은 각 컬럼의 이름(Name) 과 데이터 타입(Data Type) 을 정의하는
Schema를 가지고 있습니다.
DataFrame의 Schema를 확인하려면 printSchema 메서드를 사용합니다.
1 | customerDF.printSchema() |
이 명령을 실행하면 DataFrame의 Schema가
사람이 읽기 쉬운 형태로 출력됩니다.
1. 왜 Schema를 직접 정의해야 할까?
예를 들어, 데이터 파일을 보면 address_id 컬럼의 값은 크지 않습니다.
하지만 Spark는 자동으로 이를 Long 타입으로 인식할 수 있습니다.
이 경우:
- Long 타입은 불필요하게 큰 타입이고
- Integer 타입으로 충분한 상황입니다
따라서 Schema를 직접 정의하여 데이터 타입을 정확히 지정하는 것이 좋습니다.
2. Schema를 정의하는 첫 번째 방법: DDL 문자열 방식
DataFrame Schema를 정의하는 첫 번째 방법은
DDL(Data Definition Language) 형식의 문자열을 사용하는 것입니다.
DDL 문자열은:
- 컬럼 이름
- 컬럼 데이터 타입
을 문자열 형태로 나열한 것입니다.
DDL Schema 정의 절차
Schema 정보를 담을 변수를 생성합니다
변수 이름 예시: customerDFSchemaDDL문자열 안에 각 컬럼의 이름과 데이터 타입을 순서대로 작성합니다
예를 들어:
- address_id → Integer
- birth_country → String
- birth_date → Date
데이터 타입 지정 시 주의 사항
예를 들어 birth_date 컬럼은:
- 원본 JSON 파일에서는 문자열(String) 형태로 저장되어 있지만
- 실제 의미는 날짜(Date)입니다
따라서 Schema를 수동으로 정의할 때는
실제 의미에 맞는 데이터 타입(Date)을 지정해야 합니다.
DDL Schema 적용
DDL 문자열을 정의한 후에는
DataFrame을 생성할 때 schema 옵션으로 적용합니다.
이렇게 하면 Spark는:
- 자동 추론이 아니라
- 우리가 지정한 Schema를 그대로 사용합니다
Schema 변경 결과 확인
다시 customerDF.printSchema()를 실행하면:
- 이전에는 address_id가 Long 타입
- 이제는 Integer 타입
- birth_date는 String → Date
로 변경된 것을 확인할 수 있습니다.
3. Schema를 정의하는 두 번째 방법: StructType 사용
두 번째 방법은
StructType과 StructField를 직접 사용하는 방식입니다.
기존 DataFrame의 Schema 확인
DataFrame에는 schema라는 속성이 있습니다.
customerDF.schema
이 값을 출력해 보면:
- 문자열이 아니라
- Apache Spark의 StructType 객체 형태로 Schema가 반환됩니다
StructType은:
- 여러 개의 StructField로 구성되고
- 각 StructField는 다음 정보를 포함합니다
- 컬럼 이름
- 데이터 타입
- nullable 여부
nullable 플래그는:
- Spark 내부 최적화를 위한 힌트일 뿐이며
- false라고 해서 null 값이 실제로 없는 것은 아닙니다
StructType Schema 직접 정의하기
StructType은:
- StructField들의 컬렉션이며
- 복합 타입(Struct 안에 Struct, Array 등)도 표현할 수 있습니다
demographics 컬럼은:
- StructType 안에
- Array 타입 필드를 포함하는
- 복합 컬럼의 예시입니다
필요한 패키지 Import
StructType을 사용하려면 다음 패키지를 import 해야 합니다.
import org.apache.spark.sql.types._
StructType Schema 적용
StructType Schema 역시
DataFrameReader의 schema 메서드에 그대로 전달할 수 있습니다.
DDL 문자열과 StructType은
동일한 결과를 만들어 냅니다.
4. Schema를 정의하는 세 번째 방법: Infer Schema
세 번째 방법은
Apache Spark에게 Schema 추론을 맡기는 방식입니다.
이를 위해 DataFrameReader에 옵션을 추가합니다.
1 | option("inferSchema", "true") |
Spark는:
- 일부 데이터를 먼저 읽고
- 데이터 타입을 추론한 뒤
- 전체 데이터를 다시 읽습니다
Infer Schema의 단점
Infer Schema 방식은:
- 데이터를 두 번 읽기 때문에 성능 비용이 발생하고
- Integer와 Long을 정확히 구분하지 못할 수 있습니다
따라서 운영 환경에서는 Schema를 직접 정의하는 것이 권장됩니다.
5. Apache Spark 문서 활용 방법 (시험 대비 핵심)
시험 준비 시 매우 중요한 역량은
Apache Spark 공식 문서를 빠르게 찾고 읽는 능력입니다.
DataFrameReader 문서 확인
Apache Spark 공식 문서에서:
- 최신 버전 선택
- Scala API 문서 선택
- DataFrameReader 검색
이를 통해 다음을 확인할 수 있습니다.
- format 메서드의 정확한 시그니처
- json 메서드 사용법
- option, load 등 모든 사용 가능한 API
문서 활용의 중요성
시험 문제 예시:
- format 메서드는 몇 개의 인자를 받는가?
- inferSchema 옵션은 어떻게 사용하는가?
이런 문제는:
- 문서를 읽을 수 있다면
- 바로 답을 찾을 수 있습니다
6. 정리
이번 강의에서 배운 내용:
- DataFrame Schema 확인 방법
- Schema 정의 3가지 방법
- DDL 문자열
- StructType
- Infer Schema
- 운영 환경에서는 Schema 수동 정의 권장
- Apache Spark 문서 활용 방법
다음 강의에서는:
- DataFrameReader의 다양한 옵션
- JSON 외 다른 데이터 소스 읽기
를 살펴보겠습니다.
