Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat bekerja dengan jenis data berlapis, Azure Databricks mengoptimalkan transformasi tertentu secara langsung. Contoh kode berikut menunjukkan pola untuk bekerja dengan jenis data yang kompleks dan berlapis di Azure Databricks.
Notasi titik untuk mengakses data berlapis
Anda dapat menggunakan notasi titik (.) untuk mengakses bidang berlapis.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Pilih semua kolom bersarang
Gunakan operator bintang (*) untuk memilih semua bidang dalam bidang tertentu.
Catatan
Ini hanya membongkas bidang berlapis pada kedalaman yang ditentukan.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Membuat bidang berlapis baru
struct() Gunakan fungsi untuk membuat bidang berlapis baru.
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
Memasukkan semua bidang ke dalam kolom
Gunakan operator bintang (*) untuk menumpuk semua bidang dari sumber data menjadi satu kolom.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Pilih bidang bernama dari kolom berlapis
Gunakan tanda kurung siku [] untuk memilih bidang berlapis dari kolom.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Meledakkan elemen berlapis dari peta atau array
Gunakan fungsi explode() untuk membuka kemasan nilai dari kolom jenis ARRAY dan MAP.
ARRAY kolom menyimpan nilai sebagai daftar. Saat dibonglis dengan explode(), setiap nilai menjadi baris dalam output.
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
Kolom MAP menyimpan nilai sebagai pasangan kunci-nilai terurut. Saat dibongkar dengan explode(), setiap kunci menjadi kolom dan nilai menjadi baris.
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
Buat array dari daftar atau set
Gunakan fungsi collect_list() atau collect_set() untuk mengubah nilai kolom menjadi array.
collect_list() mengumpulkan semua nilai dalam kolom, sementara collect_set() hanya mengumpulkan nilai unik.
Catatan
Spark tidak menjamin urutan item dalam array yang dihasilkan dari salah satu operasi.
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;
Memilih kolom dari peta dalam array
Anda juga dapat menggunakan notasi titik (.) untuk mengakses bidang di peta yang terkandung dalam array. Ini mengembalikan array berisi semua nilai dari bidang yang ditentukan.
Pertimbangkan struktur data berikut:
{
"column_name": [
{ "field1": 1, "field2": "a" },
{ "field1": 2, "field2": "b" }
]
}
Anda bisa mengembalikan nilai dari field1 sebagai array dengan kueri berikut:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Mengubah data berlapis menjadi JSON
to_json Gunakan fungsi untuk mengonversi jenis data kompleks ke 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
Untuk mengodekan semua konten kueri atau DataFrame, gabungkan ini dengan 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
Catatan
Azure Databricks juga mendukung to_avro dan to_protobuf untuk mengubah jenis data yang kompleks untuk interoperabilitas dengan sistem terintegrasi.
Mengubah data JSON menjadi data yang kompleks
from_json Gunakan fungsi untuk mengonversi data JSON ke jenis data kompleks asli.
Catatan
Anda harus menentukan skema untuk data 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: mengubah jenis data kompleks
Notebook berikut ini menyediakan contoh untuk bekerja dengan jenis data kompleks untuk Python, Scala, dan SQL.