다음을 통해 공유


CSV 파일 읽기

이 문서에서는 Python, Scala, R 및 SQL을 사용하여 Azure Databricks로 CSV 파일을 읽고 쓰는 예제를 제공합니다.

참고 항목

Databricks는 SQL 사용자가 CSV 파일을 읽을 수 있도록 read_files 테이블 반환 함수 권장합니다. read_files는 Databricks Runtime 13.3 LTS 및 이상에서 사용 가능합니다.

임시 보기를 사용할 수도 있습니다. SQL을 사용하여 임시 뷰 또는 read_files사용하지 않고 CSV 데이터를 직접 읽는 경우 다음 제한 사항이 적용됩니다.

옵션

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 옵션을 열 이름으로 설정하여 구조된 데이터 열을 활성화할 수 있으며, 예를 들어 _rescued_data 열이 있는 spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)같은 경우에 가능합니다.

CSV 파서는 레코드를 구문 분석할 때 PERMISSIVE, DROPMALFORMEDFAILFAST 등, 세 가지 모드를 지원합니다. rescuedDataColumn과 함께 사용하면 데이터 형식 불일치로 인해 DROPMALFORMED 모드에서 레코드가 삭제되거나 FAILFAST 모드에서 오류가 throw되지 않습니다. 손상된 레코드, 즉 불완전하거나 형식이 잘못된 CSV만 삭제되거나 오류를 throw합니다.

rescuedDataColumnPERMISSIVE 모드에서 사용되면 다음 규칙이 손상된 레코드에 적용됩니다.

  • 파일의 첫 번째 행(헤더 행 또는 데이터 행)은 예상되는 행 길이를 설정합니다.
  • 열 수가 다른 행은 불완전한 것으로 간주됩니다.
  • 데이터 형식 불일치는 손상된 레코드로 간주되지 않습니다.
  • 불완전하고 형식이 잘못된 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(
  'abfss://<bucket>@<storage-account>.dfs.core.windows.net/<path>/<file>.csv',
  format => 'csv',
  header => true,
  mode => 'FAILFAST')

Scala, R 및 Python 예제: CSV 파일 읽기

다음 Notebook에서는 Scala, R 및 Python을 사용하여 파일을 읽고, 샘플 데이터를 표시하고, 데이터 스키마를 인쇄하는 방법을 보여줍니다. 이 예에서는 다이아몬드 데이터 세트를 사용합니다. 데이터 세트의 경로와 원하는 옵션을 지정합니다.

CSV 파일 Notebook 읽기

노트북 가져오기

예제: 스키마 지정

CSV 파일의 스키마가 알려진 경우 schema 옵션을 사용하여 CSV 판독기에서 원하는 스키마를 지정할 수 있습니다.

스키마 Notebook을 사용하여 CSV 파일 읽기

노트북 가져오기

read_files을 사용하는 SQL 예제:

SELECT * FROM read_files(
  'abfss://<bucket>@<storage-account>.dfs.core.windows.net/<path>/<file>.csv',
  format => 'csv',
  header => false,
  schema => 'id string, date date, event_time timestamp')

예: 열의 하위 집합을 읽을 때의 함정

CSV 파서의 동작은 읽는 열 집합에 따라 달라집니다. 지정된 스키마가 올바르지 않으면 액세스되는 열의 하위 집합에 따라 결과가 상당히 다를 수 있습니다. 다음 Notebook은 가장 일반적인 함정을 보여 줍니다.

CSV 파일 Notebook의 열 하위 집합을 읽는 주의 사항

노트북 가져오기