복합 데이터 형식 변환
중첩된 데이터 형식을 사용하는 동안 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()
함수를 사용하여 ARRAY
및 MAP
형식 열에서 값을 추출합니다.
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_avro
과 to_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 변환
노트북 가져오기