다음을 통해 공유


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

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, 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(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => true,
  mode => 'FAILFAST')

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

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

CSV 파일 Notebook 읽기

Notebook 가져오기

예제: 스키마 지정

CSV 파일의 스키마를 알면 schema 옵션을 사용하여 CSV 읽기 권한자에 원하는 스키마를 지정할 수 있습니다.

스키마 Notebook으로 CSV 파일 읽기

Notebook 가져오기

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은 가장 일반적인 함정을 보여 줍니다.

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

Notebook 가져오기