Mengakses Data Kompleks dalam Spark SQL DataFrames
Spark SQL menyokong jenis data yang kompleks seperti tatasusunan dan peta. Walau bagaimanapun, pertanyaan ini memerlukan pendekatan khusus. Panduan ini memperincikan cara menanyakan struktur ini dengan berkesan:
Susunan:
Beberapa kaedah wujud untuk mengakses elemen tatasusunan:
getItem
: Kaedah API DataFrame ini mengakses terus elemen mengikut indeks.
<code class="language-scala"> df.select($"an_array".getItem(1)).show</code>
Sintaks kurungan Hive: Sintaks seperti SQL ini menawarkan alternatif.
<code class="language-sql"> SELECT an_array[1] FROM df</code>
Fungsi Ditentukan Pengguna (UDF): UDF memberikan kefleksibelan untuk manipulasi tatasusunan yang lebih kompleks.
<code class="language-scala"> val get_ith = udf((xs: Seq[Int], i: Int) => Try(xs(i)).toOption) df.select(get_ith($"an_array", lit(1))).show</code>
Fungsi terbina dalam: Spark menawarkan fungsi terbina dalam seperti transform
, filter
, aggregate
dan keluarga array_*
untuk pemprosesan tatasusunan.
Peta:
Mengakses nilai peta melibatkan teknik yang serupa:
getField
kaedah: Mengambil nilai menggunakan kekunci.
<code class="language-scala"> df.select($"a_map".getField("foo")).show</code>
Sintaks kurungan Hive: Menyediakan pendekatan seperti SQL.
<code class="language-sql"> SELECT a_map['foo'] FROM df</code>
Sintaks titik: Cara ringkas untuk mengakses medan peta.
<code class="language-scala"> df.select($"a_map.foo").show</code>
UDF: Untuk operasi peta tersuai.
<code class="language-scala"> val get_field = udf((kvs: Map[String, String], k: String) => kvs.get(k)) df.select(get_field($"a_map", lit("foo"))).show</code>
*`map_functions:** Functions like
map_keysand
map_values` tersedia untuk manipulasi peta.
Struktur:
Mengakses medan struct adalah mudah:
Sintaks titik: Kaedah paling langsung.
<code class="language-scala"> df.select($"a_struct.x").show</code>
SQL Mentah: Alternatif menggunakan sintaks SQL.
<code class="language-sql"> SELECT a_struct.x FROM df</code>
Susunan Struktur:
Menyoal struktur bersarang memerlukan gabungan teknik di atas:
Sintaks titik bersarang: Akses medan dalam struct dalam tatasusunan.
<code class="language-scala"> df.select($"an_array_of_structs.foo").show</code>
Kaedah gabungan: Menggunakan getItem
untuk mengakses elemen tatasusunan dan kemudian sintaks titik untuk medan struct.
<code class="language-scala"> df.select($"an_array_of_structs.vals".getItem(1).getItem(1)).show</code>
Jenis Ditentukan Pengguna (UDT):
UDT biasanya diakses menggunakan UDF.
Pertimbangan Penting:
HiveContext
, bergantung pada versi Spark anda.*
) boleh digunakan dengan sintaks titik untuk memilih berbilang medan.Panduan ini menyediakan gambaran keseluruhan yang komprehensif tentang pertanyaan jenis data kompleks dalam Spark SQL DataFrames. Ingat untuk memilih kaedah yang paling sesuai untuk keperluan khusus anda dan struktur data.
Atas ialah kandungan terperinci Bagaimanakah Saya Menyoal Jenis Data Kompleks (Array, Peta, Struktur) dalam Spark SQL DataFrames?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!