복합 데이터 형식 변환
중첩된 데이터 형식을 사용하는 동안 Azure Databricks는 특정 변환을 기본으로 최적화합니다. 다음 코드 예제에서는 Azure Databricks에서 복잡하고 중첩된 데이터 형식을 사용하는 패턴을 보여 줍니다.
중첩된 데이터에 액세스하기 위한 점 표기법
점 표기법(.
)을 사용하여 중첩된 필드에 액세스할 수 있습니다.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
모든 중첩 필드 Select
별 연산자(*
)를 사용하여 지정된 필드 내의 모든 필드를 select.
참고 항목
이렇게 하면 지정된 깊이에서 중첩된 필드만 압축을 풉니다.
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
모든 필드를 column 안에 넣으세요.
별 연산자(*
)를 사용하여 데이터 원본의 모든 필드를 하나의 column로 중첩합니다.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
명명된 필드 Select, 중첩된 column에서 나온
대괄호 []
를 사용하여 column내의 중첩된 필드를 select.
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
에서 values을 형식 columns로 압축 해제합니다.
ARRAY
columns 저장소에 values를 list로 저장합니다.
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
columns
values를 순서가 지정된 키-값 쌍으로 저장합니다.
explode()
를 사용하여 압축을 풀면 각 키는 column이 되고, values는 행들이 됩니다.
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
배열 만들기: list 또는 set로부터
함수 collect_list()
또는 collect_set()
을 사용하여 column의 values를 배열로 변환합니다.
collect_list()
는 column에서 모든 values를 수집하는 반면, collect_set()
는 고유한 values만 수집합니다.
참고 항목
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;
배열 안에 있는 맵에서 Select과 column
점 표기법(.
)을 사용하여 배열 내에 포함된 맵의 필드에 액세스할 수도 있습니다. 지정된 필드에 대한 모든 values 배열을 반환합니다.
다음 데이터 구조를 고려합니다:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
다음 쿼리를 사용하여 field1
에서 values를 배열로 반환할 수 있습니다.
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 데이터에 대한 schema를 지정해야 합니다.
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에 대한 복잡한 데이터 형식을 사용하는 예제를 제공합니다.