CSV 파일 읽기
이 문서에서는 Python, Scala, R 및 SQL을 사용하여 Azure Databricks로 CSV 파일을 읽고 쓰는 예제를 제공합니다.
참고 항목
Databricks는 SQL 사용자가 CSV 파일을 읽을 때 read_files 테이블 값 함수를 권장합니다. read_files
는 Databricks Runtime 13.3 LTS 및 이상에서 사용 가능합니다.
임시 보기를 사용할 수도 있습니다. 임시 뷰를 사용하지 않고 SQL을 사용하여 CSV 데이터를 직접 읽거나 또는 read_files
, 다음 제한 사항이 적용됩니다:
- 데이터 원본 옵션을 지정할 수 없습니다.
- 데이터에 대해 스키마를 지정할 수 없습니다.
옵션
CSV 파일 데이터 원본에 대해 여러 옵션을 구성할 수 있습니다. 지원되는 읽기 옵션은 다음 Apache Spark 참조 문서를 참조하세요:
이 문서에서는 CSV를 읽는 방법만 다루지만, 다음 Apache Spark 참조 문서에서 지원되는 쓰기 옵션에 대해 알아볼 수 있습니다:
형식이 잘못된 CSV 레코드 작업
지정된 스키마로 CSV 파일을 읽을 때 파일의 데이터가 스키마와 일치하지 않을 수 있습니다. 예를 들어 도시 이름이 포함된 필드는 정수로 구문 분석되지 않습니다. 결과는 파서가 실행되는 모드에 따라 다릅니다.
PERMISSIVE
(기본값): 올바르게 구문 분석할 수 없는 필드에 null이 삽입됩니다.DROPMALFORMED
: 구문 분석할 수 없는 필드가 포함된 행 삭제FAILFAST
: 잘못된 데이터가 발견되면 읽기를 중단합니다.
모드를 설정하려면 mode
옵션을 사용합니다.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
PERMISSIVE
모드에서는 다음 방법 중 하나를 사용하여 올바르게 구문 분석할 수 없는 행을 검사할 수 있습니다.
- 파일에 손상된 레코드를 기록하기 위해 옵션
badRecordsPath
에 대한 사용자 지정 경로를 제공할 수 있습니다. - DataFrameReader에 제공된 스키마에 열
_corrupt_record
를 추가하여 결과 DataFrame에서 손상된 레코드를 검토할 수 있습니다.
참고 항목
badRecordsPath
옵션은 _corrupt_record
보다 우선 적용됩니다. 즉, 제공된 경로에 작성된 잘못된 행이 결과 DataFrame에 표시되지 않습니다.
복구된 데이터 열을 사용할 때 형식이 잘못된 레코드에 대한 기본 동작이 변경됩니다.
잘못된 행 찾기 Notebook
복구된 데이터 열
참고 항목
이 기능은 Databricks Runtime 8.3(EoS) 및 이상에서 지원됩니다.
PERMISSIVE
모드를 사용할 때 구조된 데이터 열을 사용하도록 설정하여 레코드의 하나 이상의 필드에 다음 문제 중 하나가 있기 때문에 구문 분석되지 않은 모든 데이터를 캡처할 수 있습니다.
- 제공된 스키마가 없습니다.
- 제공된 스키마의 데이터 형식과 일치하지 않습니다.
- 제공된 스키마의 필드 이름과 대/소문자가 일치하지 않습니다.
복구된 데이터 열은 복구된 열과 레코드의 원본 파일 경로를 포함하는 JSON 문서로 반환됩니다. 복구된 데이터 열에서 원본 파일 경로를 제거하려면 SQL 구성 spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
를 설정할 수 있습니다. 데이터를 읽을 때 rescuedDataColumn
옵션을 열 이름으로 설정하여 복구된 데이터 열을 사용하도록 설정할 수 있습니다(예: spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
가 있는 _rescued_data
).
CSV 파서는 레코드를 구문 분석할 때 PERMISSIVE
, DROPMALFORMED
및 FAILFAST
등, 세 가지 모드를 지원합니다. rescuedDataColumn
과 함께 사용하면 데이터 형식 불일치로 인해 DROPMALFORMED
모드에서 레코드가 삭제되거나 FAILFAST
모드에서 오류가 throw되지 않습니다. 손상된 레코드, 즉 불완전하거나 형식이 잘못된 CSV만 삭제되거나 오류를 throw합니다.
rescuedDataColumn
이 PERMISSIVE
모드에서 사용되면 다음 규칙이 손상된 레코드에 적용됩니다.
- 파일의 첫 번째 행(헤더 행 또는 데이터 행)은 예상되는 행 길이를 설정합니다.
- 열 수가 다른 행은 불완전한 것으로 간주됩니다.
- 데이터 형식 불일치는 손상된 레코드로 간주되지 않습니다.
- 불완전하고 형식이 잘못된 CSV 레코드만 손상된 것으로 간주되어
_corrupt_record
열 또는badRecordsPath
에 기록됩니다.
SQL 예제: CSV 파일 읽기
다음 SQL 예제에서는 read_files
을 사용하여 CSV 파일을 읽습니다.
-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => true,
mode => 'FAILFAST')
Scala, R 및 Python 예제: CSV 파일 읽기
이 Notebook은 Scala, R, Python 및 SQL을 사용하여 파일을 읽고, 샘플 데이터를 표시하고, 데이터 스키마를 인쇄하는 방법을 보여 줍니다. 이 예에서는 다이아몬드 데이터 세트를 사용합니다. 데이터 세트의 경로와 원하는 옵션을 지정합니다.
CSV 파일 Notebook 읽기
예제: 스키마 지정
CSV 파일의 스키마를 알면 schema
옵션을 사용하여 CSV 읽기 권한자에 원하는 스키마를 지정할 수 있습니다.
스키마 Notebook으로 CSV 파일 읽기
read_files
을 사용하는 SQL 예제:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
예제: 열의 하위 집합을 읽을 때의 함정
CSV 파서의 동작은 읽는 열 집합에 따라 다릅니다. 지정된 스키마가 잘못된 경우 액세스하는 열의 하위 집합에 따라 결과가 상당히 다를 수 있습니다. 다음 Notebook은 가장 일반적인 함정을 보여 줍니다.