Spark SQL menyokong pertanyaan jenis kompleks yang disimpan dalam bingkai data, seperti peta dan tatasusunan. Panduan ini menggariskan sintaks dan kaedah untuk mengakses dan memanipulasi struktur data bersarang.
<code>df.select($"arrayColumn".getItem(index)).show</code>
Di mana, indeks mewakili kedudukan elemen yang diperlukan dalam tatasusunan.
<code>sqlContext.sql("SELECT arrayColumn[index] FROM df").show</code>
<code>val get_ith = udf((xs: Seq[Int], i: Int) => Try(xs(i)).toOption) df.select(get_ith($"arrayColumn", lit(index))).show</code>
Spark 2.4 memperkenalkan fungsi terbina dalam seperti fungsi penapis, transformasi, agregat dan tatasusunan_* yang boleh digunakan untuk beroperasi pada tatasusunan:
<code>df.selectExpr("filter(arrayColumn, x -> x % 2 == 0) arrayColumn_even").show</code>
<code>df.selectExpr("transform(arrayColumn, x -> x + 1) arrayColumn_inc").show</code>
<code>df.selectExpr("aggregate(arrayColumn, 0, (acc, x) -> acc + x, acc -> acc) arrayColumn_sum").show</code>
<code>df.select($"mapColumn".getField("key")).show</code>
Kekunci mewakili nama kunci yang diperlukan dalam peta.
<code>sqlContext.sql("SELECT mapColumn['key'] FROM df").show</code>
<code>df.select($"mapColumn.key").show</code>
<code>val get_field = udf((kvs: Map[String, String], k: String) => kvs.get(k)) df.select(get_field($"mapColumn", lit("key"))).show</code>
<code>df.select($"structColumn.field").show</code>
Antaranya, medan mewakili nama medan yang diperlukan dalam struktur.
Medan dalam tatasusunan struktur bersarang boleh diakses menggunakan gabungan sintaks titik, nama medan dan kaedah Lajur:
<code>df.select($"nestedArrayColumn.foo").show</code>
<code>df.select($"nestedArrayColumn.vals".getItem(index).getItem(innerIndex)).show</code>
Atas ialah kandungan terperinci Bagaimana untuk Membuat Pertanyaan Spark SQL DataFrames dengan Struktur Data Bersarang (Peta, Tatasusunan, Struktur)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!