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