تحويل أنواع البيانات المعقدة

أثناء العمل مع أنواع البيانات المتداخلة، يعمل Azure Databricks على تحسين بعض التحويلات الجاهزة. توضح أمثلة التعليمات البرمجية التالية أنماطا للعمل مع أنواع البيانات المعقدة والمتداخلة في Azure Databricks.

رمز Dot للوصول إلى البيانات المتداخلة

يمكنك استخدام تدوين النقطة (.) للوصول إلى حقل متداخل.

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

إشعار

يدعم to_avro Azure Databricks أيضا و 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

دفتر الملاحظات: تحويل أنواع البيانات المعقدة

توفر دفاتر الملاحظات التالية أمثلة للعمل مع أنواع البيانات المعقدة ل Python وSc scala وSQL.

تحويل أنواع البيانات المعقدة في دفتر ملاحظات Python

الحصول على دفتر الملاحظات

تحويل أنواع البيانات المعقدة Scala notebook

الحصول على دفتر الملاحظات

تحويل أنواع البيانات المعقدة لدفتر ملاحظات SQL

الحصول على دفتر الملاحظات