Bagikan melalui


Mentransformasi jenis data kompleks

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.

Mengubah buku catatan Python tipe data yang kompleks

Dapatkan buku catatan

Mengubah buku catatan Skalar tipe data kompleks

Dapatkan buku catatan

Mengubah tipe data kompleks SQL buku catatan

Dapatkan buku catatan