تحويل أنواع البيانات المعقدة
أثناء العمل مع أنواع البيانات المتداخلة، يعمل 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.