Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

CSV 데이터셋의 파싱 설정

CSV는 구분자, 인용 문자와 이스케이프 방식이 파일마다 다를 수 있습니다. Foundry는 데이터셋 스키마에 파싱 설정을 저장하고 입력에 맞는 값을 추론합니다. 추론 결과가 실제 파일 형식과 맞는지 확인하고 필요한 설정을 수정합니다. 다음 설정은 CSV 파일로 만든 데이터셋에 적용합니다.

설정 위치와 reader 선택

Dataset Preview의 Details > Schema에서 스키마를 보고 Edit으로 편집합니다. Preview의 Edit Schema는 파싱 옵션에 따라 결과가 어떻게 달라지는지 확인하는 UI입니다. 심하게 불규칙한 CSV는 스키마를 직접 편집해야 할 수 있습니다.

일반적인 CSV 데이터셋은 dataFrameReaderClass에 TextDataFrameReader를 사용합니다. 실행 시에는 Spark CSV DataFrameReader에 처리를 위임합니다. Spark 옵션을 직접 사용하는 별도 경로에는 DataSourceDataFrameReader를 지정합니다.

TextDataFrameReader

기존 열 정의 fieldSchemaList와 다른 필요한 스키마 항목은 유지하고 다음 reader 및 customMetadata.textParserParams 설정을 구성합니다. 아래는 UTF-8 CSV에서 첫 줄을 건너뛰는 예시입니다. skipLines의 일반 기본값은 0이며 여기서는 1을 지정했습니다. nullValues는 null로 읽을 문자열 목록이며 예제에서는 추가 표식을 지정하지 않았습니다.

{
  "dataFrameReaderClass": "com.palantir.foundry.spark.input.TextDataFrameReader",
  "customMetadata": {
    "textParserParams": {
      "parser": "CSV_PARSER",
      "nullValues": [],
      "charsetName": "UTF-8",
      "fieldDelimiter": ",",
      "recordDelimiter": "\n",
      "quoteCharacter": "\"",
      "dateFormat": {},
      "skipLines": 1,
      "jaggedRowBehavior": "THROW_EXCEPTION",
      "parseErrorBehavior": "THROW_EXCEPTION",
      "addFilePath": false,
      "addFilePathInsteadOfUri": false,
      "addImportedAt": false,
      "initialReadTimeout": "1 hour"
    }
  }
}
속성의미값과 기본값적용 파서
parser사용할 파서필수. CSV_PARSER, MULTILINE_CSV_PARSER, SIMPLE_PARSER, SINGLE_COLUMN_PARSER파서 선택 자체
nullValuesnull로 해석할 문자열필수 문자열 목록전체
fieldDelimiter행을 필드로 나누는 구분자한 문자 문자열. 기본 쉼표CSV, MULTILINE CSV, SIMPLE
recordDelimiter파일을 레코드로 나누는 줄 끝줄바꿈 문자로 끝나는 문자열. 기본 \nCSV, MULTILINE CSV
quoteCharacterCSV 인용 문자한 문자 문자열. 기본 큰따옴표CSV, MULTILINE CSV
dateFormat열별 날짜 해석 형식열 이름에서 JodaTime DateTimeFormat 패턴으로의 맵. 기본 빈 맵CSV, MULTILINE CSV, SIMPLE
skipLines파일마다 처음에 건너뛸 줄 수음이 아닌 수. 기본 0전체
jaggedRowBehavior스키마보다 필드가 많거나 적은 행 처리THROW_EXCEPTION 또는 DROP_ROW. 기본 THROW_EXCEPTION별도 파서 구분 없음
parseErrorBehavior지정 자료형으로 값을 해석하지 못할 때 처리THROW_EXCEPTION 또는 REPLACE_WITH_NULL. 기본 THROW_EXCEPTION별도 파서 구분 없음
addFilePath각 행에 파일 경로 추가Boolean. 기본 false전체
addImportedAt각 행에 가져온 시각 추가Boolean. 기본 false전체
initialReadTimeout첫 행을 읽기 시작할 때까지의 대기 제한사람이 읽는 duration. 기본 1 hour전체

표의 CSV, MULTILINE CSV와 SIMPLE은 각각 CSV_PARSER, MULTILINE_CSV_PARSER, SIMPLE_PARSER를 줄여 쓴 것입니다. 첫 행 대기 제한을 전체 파일 파싱 시간 한도로 해석하면 안 됩니다.

행을 버리는 DROP_ROW와 값만 null로 바꾸는 REPLACE_WITH_NULL은 손실 범위가 다릅니다. 불규칙한 행을 유지하며 공통 스키마를 적용하는 조건은 CSV 문제 해결에서 설명합니다.

Spark CSV 옵션을 직접 사용

Spark CSV DataFrameReader 옵션을 사용하려면 reader를 바꾸고 customMetadata.format을 csv로 설정합니다. 옵션은 customMetadata.options의 키와 값으로 넣습니다.

{
  "dataFrameReaderClass": "com.palantir.foundry.spark.input.DataSourceDataFrameReader",
  "customMetadata": {
    "format": "csv",
    "options": {
      "unescapedQuoteHandling": "STOP_AT_DELIMITER",
      "multiLine": true
    }
  }
}

multiLine은 인용된 값 안의 줄바꿈을 같은 레코드의 일부로 읽습니다. unescapedQuoteHandling: STOP_AT_DELIMITER는 이스케이프하지 않은 인용 문자가 있으면 값을 인용되지 않은 값으로 처리하고 구분자나 줄 끝까지 읽는 설정입니다. 파일의 실제 인용 및 이스케이프 방식에 맞게 선택해야 합니다.

TextDataFrameReader의 fieldDelimiter와 Spark의 sep/delimiter처럼 비슷한 의미라도 설정 이름과 허용값이 같지는 않습니다. 두 reader의 옵션을 한 경로에 섞지 않습니다.