다음을 통해 공유


JSON 파일

JSON 파일은 한 줄 모드 또는 여러 줄 모드로 읽을 수 있습니다. 한 줄 모드에서는 파일이 여러 부분으로 분할되어 병렬로 읽힐 수 있습니다. 여러 줄 모드에서는 파일이 완전한 엔터티로 로드되며 분할될 수 없습니다.

자세한 내용은 JSON 파일을 참조하세요.

옵션

지원되는 읽기 및 쓰기 옵션은 다음 Apache Spark 참조 문서를 참조하세요.

복구된 데이터 열

참고 항목

이 기능은 Databricks Runtime 8.2(EoS) 및 이상에서 지원됩니다.

복구된 데이터 열은 ETL 중에 데이터를 손실하거나 누락하지 않도록 합니다. 지정된 스키마에서 누락되었거나 형식이 일치하지 않거나 레코드 또는 파일의 열 대/소문자가 스키마의 대/소문자와 일치하지 않으므로 복구된 데이터 열에는 구문 분석되지 않은 모든 데이터가 포함됩니다. 복구된 데이터 열은 복구된 열과 레코드의 원본 파일 경로를 포함하는 JSON Blob으로 반환됩니다. 복구된 데이터 열에서 원본 파일 경로를 제거하려면 SQL 구성 spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")를 설정할 수 있습니다. _rescued_dataspark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)처럼, rescuedDataColumn 옵션을 열 이름으로 설정하여 구조된 데이터 열을 사용하도록 설정할 수 있습니다.

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

예제

한 줄 모드

다음 예제에는 줄당 하나의 JSON 개체가 있습니다.

{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}}
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}}
{"string":"string3","int":3,"array":[3,6,9],"dict": {"key": "value3", "extra_key": "extra_value3"}}

JSON 데이터를 읽으려면 다음을 사용합니다.

val df = spark.read.format("json").load("example.json")

Spark는 스키마를 자동으로 유추합니다.

df.printSchema
root
 |-- array: array (nullable = true)
 |    |-- element: long (containsNull = true)
 |-- dict: struct (nullable = true)
 |    |-- extra_key: string (nullable = true)
 |    |-- key: string (nullable = true)
 |-- int: long (nullable = true)
 |-- string: string (nullable = true)

여러 줄 모드

이 JSON 개체는 여러 줄을 차지합니다.

[
  {"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}},
  {"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}},
  {
    "string": "string3",
    "int": 3,
    "array": [
        3,
        6,
        9
    ],
    "dict": {
        "key": "value3",
        "extra_key": "extra_value3"
    }
  }
]

이 개체를 읽으려면 여러 줄 모드를 사용하도록 설정합니다.

SQL

CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)

Scala

val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)

문자 집합 자동 감지

기본적으로 입력 파일의 문자 집합은 자동으로 감지됩니다. charset 옵션을 사용하여 문자 집합을 명시적으로 지정할 수 있습니다.

spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")

지원되는 문자 집합의 예는 UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, UTF-32입니다. Oracle Java SE에서 지원하는 전체 문자 집합을 보려면 Supported Encodings(지원되는 인코딩)를 참조하세요.

Notebook 예제: JSON 파일 읽기

다음 notebook은 한 줄 모드와 여러 줄 모드를 보여줍니다.

JSON 파일 Notebook 읽기

notebook 가져오기