Karmaşık veri türlerini dönüştürme
Azure Databricks, iç içe veri türleriyle çalışırken kullanıma sunulan bazı dönüştürmeleri iyileştirir. Aşağıdaki kod örnekleri, Azure Databricks'te karmaşık ve iç içe veri türleriyle çalışmaya yönelik desenleri gösterir.
İç içe verilere erişmek için nokta gösterimi
İç içe yerleştirilmiş bir alana erişmek için nokta gösterimi (.
) kullanabilirsiniz.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Select tüm iç içe alanlar
Belirli bir alan içindeki tüm alanların select edilmesi için yıldız işlecini (*
) kullanın.
Not
Bu yalnızca belirtilen derinlikte iç içe yerleştirilmiş alanları açar.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Yeni iç içe alan oluşturma
İşlevi struct()
kullanarak yeni bir iç içe alan oluşturun.
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
Tüm alanları bir column içine yerleştir
Veri kaynağındaki tüm alanları tek bir columnolarak iç içe yerleştirmek için yıldız işlecini (*
) kullanın.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
İç içe yerleştirilmiş bir column adlandırılmış alanı Select
column'den gelen iç içe alanlar için []
'dan select'e kadar köşeli parantez kullanın.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Bir harita veya diziden iç içe öğeleri patlatma
ARRAY
ve MAP
türü columns'ten values'i açmak için explode()
işlevini kullanın.
ARRAY
columns
values
listolarak depolayın. ile explode()
paketten çıkarıldığında, her değer çıktıda bir satıra dönüşür.
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 sıralı anahtar-değer çiftleri olarak depolar.
explode()
ile paketten çıkarıldığında her anahtar bir column olur ve values satır olur.
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 veya set'den bir dizi oluşturun
Bir column'in values'sini diziye dönüştürmek için collect_list()
veya collect_set()
işlevlerini kullanın.
collect_list()
columniçindeki tüm values toplarken collect_set()
yalnızca benzersiz valuestoplar.
Not
Spark, her iki işlemden de kaynaklanan dizideki öğelerin sırasını garanti etmez.
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;
Dizideki bir haritadan Selectcolumn
Ayrıca, bir dizi içinde yer alan haritalardaki alanlara erişmek için noktalı gösterimi (.
) de kullanabilirsiniz. Belirtilen alan için tüm values elemanlarını içeren bir dizi döndürür.
Aşağıdaki veri yapısını göz önünde bulundurun:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
aşağıdaki sorguyla field1
'den values dizi olarak döndürebilirsiniz:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
İç içe verileri JSON'a dönüştürme
to_json
Karmaşık bir veri türünü JSON'a dönüştürmek için işlevini kullanın.
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
Sorgunun veya DataFrame'in tüm içeriğini kodlamak için, bunu ile struct(*)
birleştirin.
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
Not
Azure Databricks, tümleşik sistemlerle birlikte çalışabilirlik için karmaşık veri türlerinin dönüştürülmesini de destekler to_avro
to_protobuf
.
JSON verilerini karmaşık verilere dönüştürme
from_json
JSON verilerini yerel karmaşık veri türlerine dönüştürmek için işlevini kullanın.
Not
JSON verileri için schema belirtmeniz gerekir.
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
Not defteri: karmaşık veri türlerini dönüştürme
Aşağıdaki not defterleri Python, Scala ve SQL için karmaşık veri türleriyle çalışmaya yönelik örnekler sağlar.