잘못된 레코드 및 파일 처리

Azure Databricks는 잘못된 레코드가 포함된 파일을 처리하기 위한 다양한 옵션을 제공합니다. 잘못된 데이터의 예는 다음과 같습니다.

  • 불완전하거나 손상된 레코드: 주로 JSON 및 CSV와 같은 텍스트 기반 파일 형식에서 관찰됩니다. 예를 들어 닫는 중괄호 또는 CSV 파일의 헤더 또는 첫 번째 레코드만큼 많은 열이 없는 CSV 레코드가 없는 JSON 레코드입니다.
  • 일치하지 않는 데이터 형식: 열 값에 지정되거나 유추된 데이터 형식이 없는 경우입니다.
  • 잘못된 필드 이름: 파일 또는 레코드에 지정된 열 이름이 지정되거나 유추된 스키마와 다른 대/소문자를 갖는 경우 모든 파일 형식에서 발생할 수 있습니다.
  • 손상된 파일: 파일을 읽을 수 없는 경우 Avro, Parquet 및 ORC와 같은 이진 파일 형식의 메타데이터 또는 데이터 손상 때문일 수 있습니다. 드문 경우지만 은 기본 스토리지 시스템에서 오래 지속되는 일시적인 오류로 인해 발생할 수 있습니다.
  • 누락된 파일: 쿼리 분석 시간 중에 검색되었으며 처리 시 더 이상 존재하지 않는 파일입니다.

사용 badRecordsPath

를 설정 badRecordsPath하면 지정된 경로는 데이터를 로드하는 동안 발생한 잘못된 레코드 또는 파일에 대한 예외를 기록합니다.

손상된 레코드 및 파일 외에도 삭제된 파일, 네트워크 연결 예외, IO 예외 등을 나타내는 오류는 에서 무시되고 기록됩니다 badRecordsPath.

참고

badRecordsPath 파일 기반 데이터 원본에서 옵션을 사용하면 몇 가지 중요한 제한 사항이 있습니다.

  • 트랜잭션이 아니고 일관되지 않은 결과가 발생할 수 있습니다.
  • 일시적인 오류는 오류로 처리됩니다.

입력 파일을 찾을 수 없음

val df = spark.read
  .option("badRecordsPath", "/tmp/badRecordsPath")
  .format("parquet").load("/input/parquetFile")

// Delete the input parquet file '/input/parquetFile'
dbutils.fs.rm("/input/parquetFile")

df.show()

위의 예제 df.show() 에서 은 입력 파일을 찾을 수 없으므로 Spark는 오류를 기록하기 위해 JSON 형식의 예외 파일을 만듭니다. 예를 들어 는 /tmp/badRecordsPath/20170724T101153/bad_files/xyz 예외 파일의 경로입니다. 이 파일은 지정된 badRecordsPath 디렉터리 아래에 /tmp/badRecordsPath있습니다. 20170724T101153 은 이 DataFrameReader의 생성 시간입니다. bad_files 는 예외 유형입니다. xyz 는 잘못된 파일의 경로와 예외/이유 메시지가 있는 JSON 레코드를 포함하는 파일입니다.

입력 파일에 잘못된 레코드가 포함되어 있습니다.

// Creates a json file containing both parsable and corrupted records
Seq("""{"a": 1, "b": 2}""", """{bad-record""").toDF().write.format("text").save("/tmp/input/jsonFile")

val df = spark.read
  .option("badRecordsPath", "/tmp/badRecordsPath")
  .schema("a int, b int")
  .format("json")
  .load("/tmp/input/jsonFile")

df.show()

이 예제에서 DataFrame에는 첫 번째 구문 분석 가능한 레코드({"a": 1, "b": 2})만 포함됩니다. 두 번째 잘못된 레코드({bad-record)는 에 있는 /tmp/badRecordsPath/20170724T114715/bad_records/xyzJSON 파일인 예외 파일에 기록됩니다. 예외 파일에는 잘못된 레코드, 레코드가 포함된 파일의 경로 및 예외/이유 메시지가 포함됩니다. 예외 파일을 찾은 후 JSON 판독기를 사용하여 처리할 수 있습니다.