Snowpark Checkpoints 라이브러리: 수집기¶
snowpark-checkpoints-collectors
패키지는 PySpark DataFrames에서 정보를 추출하는 함수를 제공합니다. 해당 데이터를 사용하면 변환된 Snowpark DataFrames에 대한 유효성을 검사하여 동작의 동등성을 보장할 수 있습니다.
새 검사점 컬렉션 지점을 삽입하려면 다음 함수를 사용합니다.
함수 서명:
def collect_dataframe_checkpoint(df: SparkDataFrame, checkpoint_name: str, sample: Optional[float], mode: Optional[CheckpointMode], output_path: Optional[str]) -> None:
함수 매개 변수:
컬렉션 프로세스는 :file:`checkpoint_collection_result.json`이라는 JSON 출력 파일을 생성합니다. 여기에는 다음과 같은 각 컬렉션 지점의 결과 정보가 포함됩니다.
컬렉션 지점이 시작된 타임스탬프
컬렉션 지점이 있는 파일의 상대 경로
컬렉션 지점이 있는 파일의 코드 줄
컬렉션 지점 검사점의 이름
컬렉션 지점의 결과(불합격 또는 합격)
스키마 추론 수집 데이터 모드(스키마)¶
이 모드는 기본 모드로, Pandera 스키마 추론을 활용하여 지정된 DataFrame 에 대해 평가할 메타데이터와 검사를 가져옵니다. 이 모드는 PySpark 유형에 따라 DataFrame 열에서 사용자 지정 데이터를 수집합니다.
열 데이터 및 검사 정보는 열의 PySpark 타입을 기준으로 수집됩니다(다음 테이블 참조). 열의 유형에 관계없이 모든 열에서 수집되는 사용자 지정 데이터에는 열 이름, 열 유형, null 허용 가능, 행의 수, null이 아닌 행의 수, null 행의 수가 포함됩니다.
열 유형 |
수집된 사용자 지정 데이터 |
---|---|
Numeric( |
최솟값, 최댓값, 평균값, 십진 정밀도(정수 유형의 경우 값이 0임), 표준 편차 |
날짜 |
최솟값, 최댓값, 날짜 형식(%Y-%m-%d) |
DayTimeIntervalType 및 YearMonthIntervalType |
최솟값, 최댓값 |
타임스탬프 |
최솟값, 최댓값, 날짜 형식(%Y-%m-%dH:%M:%S) |
Timestamp ntz |
최솟값, 최댓값, 날짜 형식(%Y-%m-%dT%H:%M:%S%z) |
String |
최소 길이 값, 최대 길이 값 |
Char |
PySpark는 리터럴을 문자열 유형으로 처리하므로 *char*는 유효한 유형이 아닙니다. |
Varchar |
PySpark는 리터럴을 문자열 유형으로 처리하므로 *Varchar*는 유효한 유형이 아닙니다. |
Decimal |
최솟값, 최댓값, 평균값, 십진 정밀도 |
배열 |
값의 유형, 허용되는 경우 null을 요소로 사용, null 값의 비율. 최대 배열 크기, 최소 배열 크기, 배열의 평균 크기, 모든 배열의 크기가 동일한지 여부 |
바이너리 |
최대 크기, 최소 크기, 평균 크기, 모든 요소의 크기가 동일한지 여부 |
Map |
키의 유형, 값의 유형, 허용되는 경우 null을 값으로 사용, null 값의 비율, 최대 맵 크기. 최소 맵 크기. 평균 맵 크기, 모든 맵의 크기가 동일한지 여부 |
Null |
NullType은 데이터 타입을 결정할 수 없으므로 None을 나타냅니다. 따라서 이 유형에서는 정보를 가져올 수 없습니다. |
Struct |
각 structField에 대한 구조의 메타 데이터: |
또한 다음 테이블에 자세히 설명된, 각 데이터 타입에 대해 미리 정의된 유효성 검사 세트를 정의합니다.
타입 |
Pandera 검사 항목 |
추가 검사 항목 |
---|---|---|
부울 |
각 값은 True 또는 False입니다. |
True 값과 False 값의 개수 |
Numeric( |
각 값은 최소값과 최대값의 범위 내에 있습니다. |
십진 정밀도, 평균값, 표준 편차 |
날짜 |
N/A |
최소값 및 최대값 |
타임스탬프 |
각 값은 최소값과 최대값의 범위 내에 있습니다. |
값의 형식 |
Timestamp ntz |
각 값은 최소값과 최대값의 범위 내에 있습니다. |
값의 형식 |
String |
각 값의 길이는 최소 및 최대 길이 범위 내에 있습니다. |
없음 |
Char |
PySpark는 리터럴을 문자열 유형으로 처리하므로 :code:`char`는 유효한 유형이 아닙니다. |
|
Varchar |
PySpark는 리터럴을 문자열 유형으로 처리하므로 :code:`Varchar`는 유효한 유형이 아닙니다. |
|
Decimal |
N/A |
N/A |
배열 |
N/A |
없음 |
바이너리 |
N/A |
없음 |
Map |
N/A |
없음 |
Null |
N/A |
N/A |
Struct |
N/A |
없음 |
이 모드를 사용하면 사용자가 수집할 DataFrame 샘플을 정의할 수 있지만 선택 사항입니다. 기본적으로 컬렉션은 전체 DataFrame 에서 작동합니다. 샘플의 크기는 모집단을 통계적으로 대표할 수 있어야 합니다.
Pandera는 pandas DataFrame만 추론할 수 있으므로 PySpark DataFrame을 pandas DataFrame으로 변환해야 하며, 이는 열의 유형 확인에 영향을 줄 수 있습니다. 특히 pandera는 string
, array
, map
, null
, struct
, binary
등의 PySpark 유형을 오브젝트 유형으로 추론합니다.
이 모드의 출력은 수집된 각 DataFrame의 JSON 파일이며, 파일 이름은 검사점과 동일합니다. 이 파일에는 스키마와 관련된 정보가 포함되어 있으며, 다음의 두 섹션이 있습니다.
Pandera 스키마 섹션은 이름, 유형(Pandera), 열의 null 값 허용 여부, 기타 열별 정보 등 Pandera가 추론한 데이터를 포함하며, 열이 PySpark 유형에 기반을 두고 있는지 검사합니다. Pandera의
DataFrameSchema
오브젝트입니다.사용자 지정 데이터 섹션은 PySpark 유형에 따라 각 열에서 수집한 사용자 지정 데이터의 배열입니다.
참고
대용량 PySpark DataFrames를 처리할 때 컬렉션 패키지에서 메모리 문제가 발생할 수 있습니다. 전체 PySpark DataFrame 대신 데이터의 하위 세트로 작업하려면, 컬렉션 함수의 샘플 매개 변수를 0.0에서 1.0 사이 값으로 설정하면 됩니다.
DataFrame 수집 데이터 모드(DataFrame)¶
이 모드는 PySpark DataFrame 의 데이터를 수집합니다. 이 경우 메커니즘은 주어진 DataFrame 의 모든 데이터를 Parquet 형식으로 저장합니다. 기본 사용자 Snowflake 연결을 사용하여 Parquet 파일을 Snowflake 임시 스테이지에 업로드하고 스테이지의 정보를 기반으로 테이블을 생성하려고 시도합니다. 파일과 테이블의 이름은 검사점과 동일합니다.
이 모드의 출력은 DataFrame 에 저장된 Parquet 파일 결과와 기본 Snowflake 구성 연결의 DataFrame 데이터가 포함된 테이블입니다.