다음을 통해 공유


복합 데이터 형식 변환

중첩된 데이터 형식을 사용하는 동안 Azure Databricks는 특정 변환을 기본으로 최적화합니다. 다음 코드 예제에서는 Azure Databricks에서 복잡하고 중첩된 데이터 형식을 사용하는 패턴을 보여 줍니다.

중첩된 데이터에 액세스하기 위한 점 표기법

점 표기법(.)을 사용하여 중첩된 필드에 액세스할 수 있습니다.

Python

df.select("column_name.nested_field")

SQL

SELECT column_name.nested_field FROM table_name

중첩된 모든 필드 선택

별 연산자(*)를 사용하여 지정된 필드 내의 모든 필드를 선택합니다.

참고 항목

이렇게 하면 지정된 깊이에서 중첩된 필드만 압축을 풉니다.

Python

df.select("column_name.*")

SQL

SELECT column_name.* FROM table_name

새 중첩 필드 만들기

struct() 함수를 사용하여 새 중첩 필드를 만듭니다.

Python

from pyspark.sql.functions import struct, col

df.select(struct(col("field_to_nest").alias("nested_field")).alias("column_name"))

SQL

SELECT struct(field_to_nest AS nested_field) AS column_name FROM table_name

모든 필드를 하나의 열로 묶기

별 연산자(*)를 사용하여 데이터 원본의 모든 필드를 단일 열로 중첩합니다.

Python

from pyspark.sql.functions import struct

df.select(struct("*").alias("column_name"))

SQL

SELECT struct(*) AS column_name FROM table_name

중첩 열에서 명명된 필드 선택

대괄호 []를 사용하여 열에서 중첩 필드를 선택합니다.

Python

from pyspark.sql.functions import col

df.select(col("column_name")["field_name"])

SQL

SELECT column_name["field_name"] FROM table_name

지도 또는 배열에서 중첩된 요소 분해

explode() 함수를 사용하여 ARRAYMAP 형식 열에서 값을 추출합니다.

ARRAY 열은 값을 목록으로 저장합니다. explode()로 압축을 풀면, 각 값이 출력의 행이 됩니다.

Python

from pyspark.sql.functions import explode

df.select(explode("array_name").alias("column_name"))

SQL

SELECT explode(array_name) AS column_name FROM table_name

MAP 열은 값을 순서가 지정된 키-값 쌍으로 저장합니다. explode()압축을 풀면 각 키가 열이 되고 값이 행이 됩니다.

Python

from pyspark.sql.functions import explode

df.select(explode("map_name").alias("column1_name", "column2_name"))

SQL

SELECT explode(map_name) AS (column1_name, column2_name) FROM table_name

목록 또는 집합에서 배열 만들기

collect_list() 또는 collect_set() 함수를 사용하여 열 값을 배열로 변환합니다. collect_list() 열의 모든 값을 수집하는 반면 collect_set() 고유한 값만 수집합니다.

참고 항목

Spark는 두 작업 중 하나에서 발생하는 배열의 항목 순서를 보장하지 않습니다.

Python

from pyspark.sql.functions import collect_list, collect_set

df.select(collect_list("column_name").alias("array_name"))
df.select(collect_set("column_name").alias("set_name"))

SQL

SELECT collect_list(column_name) AS array_name FROM table_name;
SELECT collect_set(column_name) AS set_name FROM table_name;

배열의 지도에서 열 선택

점 표기법(.)을 사용하여 배열 내에 포함된 맵의 필드에 액세스할 수도 있습니다. 지정된 필드에 대한 모든 값의 배열을 반환합니다.

다음 데이터 구조를 고려합니다:

{
  "column_name": [
    { "field1": 1, "field2": "a" },
    { "field1": 2, "field2": "b" }
  ]
}

다음 쿼리를 사용하여 field1 값을 배열로 반환할 수 있습니다.

Python

df.select("column_name.field1")

SQL

SELECT column_name.field1 FROM table_name

중첩된 JSON 데이터 변환

to_json 함수를 사용하여 복잡한 데이터 형식을 JSON으로 변환합니다.

Python

from pyspark.sql.functions import to_json

df.select(to_json("column_name").alias("json_name"))

SQL

SELECT to_json(column_name) AS json_name FROM table_name

쿼리 또는 DataFrame의 모든 콘텐츠를 인코딩하려면, 이 내용을 .struct(*)과 결합합니다.

Python

from pyspark.sql.functions import to_json, struct

df.select(to_json(struct("*")).alias("json_name"))

SQL

SELECT to_json(struct(*)) AS json_name FROM table_name

참고 항목

Azure Databricks 또한 to_avroto_protobuf를 통합 시스템과의 상호 운용성을 위해 복잡한 데이터 형식의 변환을 지원합니다.

JSON 데이터를 복잡한 데이터로 변환

from_json함수를 사용하여 JSON 데이터를 네이티브 복합 데이터 형식으로 변환합니다.

참고 항목

JSON 데이터에 대한 스키마를 지정해야 합니다.

Python

from pyspark.sql.functions import from_json

schema = "column1 STRING, column2 DOUBLE"

df.select(from_json("json_name", schema).alias("column_name"))

SQL

SELECT from_json(json_name, "column1 STRING, column2 DOUBLE") AS column_name FROM table_name

Notebook: 복합 데이터 형식 변환

다음 Notebook에서는 Python, Scala 및 SQL에 대한 복잡한 데이터 형식을 사용하는 예제를 제공합니다.

복잡한 데이터 형식 Python Notebook 변환

노트북 가져오기

복잡한 데이터 형식 Scala Notebook 변환

노트북 가져오기

복잡한 데이터 형식 SQL Notebook 변환

노트북 가져오기