Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Membuat Pertanyaan Spark SQL DataFrames dengan Struktur Data Bersarang (Peta, Tatasusunan, Struktur)?

Bagaimana untuk Membuat Pertanyaan Spark SQL DataFrames dengan Struktur Data Bersarang (Peta, Tatasusunan, Struktur)?

Patricia Arquette
Lepaskan: 2025-01-21 11:36:09
asal
142 orang telah melayarinya

How to Query Spark SQL DataFrames with Nested Data Structures (Maps, Arrays, Structs)?

Gunakan Spark SQL untuk menanyakan bingkai data jenis kompleks

Pengenalan

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.

Akses tatasusunan

Kaedah Column.getItem

<code>df.select($"arrayColumn".getItem(index)).show</code>
Salin selepas log masuk

Di mana, indeks mewakili kedudukan elemen yang diperlukan dalam tatasusunan.

Sintaks kurungan segi empat sarang

<code>sqlContext.sql("SELECT arrayColumn[index] FROM df").show</code>
Salin selepas log masuk

Fungsi Ditentukan Pengguna (UDF)

<code>val get_ith = udf((xs: Seq[Int], i: Int) => Try(xs(i)).toOption)

df.select(get_ith($"arrayColumn", lit(index))).show</code>
Salin selepas log masuk

Menapis dan mengubah tatasusunan

Spark 2.4 memperkenalkan fungsi terbina dalam seperti fungsi penapis, transformasi, agregat dan tatasusunan_* yang boleh digunakan untuk beroperasi pada tatasusunan:

penapis

<code>df.selectExpr("filter(arrayColumn, x -> x % 2 == 0) arrayColumn_even").show</code>
Salin selepas log masuk

transformasi

<code>df.selectExpr("transform(arrayColumn, x -> x + 1) arrayColumn_inc").show</code>
Salin selepas log masuk

agregat

<code>df.selectExpr("aggregate(arrayColumn, 0, (acc, x) -> acc + x, acc -> acc) arrayColumn_sum").show</code>
Salin selepas log masuk

Fungsi tatasusunan lain

  • tatasusunan_berbeza
  • tatasusunan_maks
  • ratakan
  • zip_tatasusunan
  • kesatuan_tatasusunan
  • hiris

Pemetaan Akses

Kaedah Column.getField

<code>df.select($"mapColumn".getField("key")).show</code>
Salin selepas log masuk

Kekunci mewakili nama kunci yang diperlukan dalam peta.

Sintaks kurungan segi empat sarang

<code>sqlContext.sql("SELECT mapColumn['key'] FROM df").show</code>
Salin selepas log masuk

Sintaks titik laluan penuh

<code>df.select($"mapColumn.key").show</code>
Salin selepas log masuk

Fungsi Ditentukan Pengguna (UDF)

<code>val get_field = udf((kvs: Map[String, String], k: String) => kvs.get(k))

df.select(get_field($"mapColumn", lit("key"))).show</code>
Salin selepas log masuk

fungsi map_*

  • kunci_peta
  • nilai_peta

Struktur akses

Sintaks titik laluan penuh

<code>df.select($"structColumn.field").show</code>
Salin selepas log masuk

Antaranya, medan mewakili nama medan yang diperlukan dalam struktur.

Akses tatasusunan struktur bersarang

Medan dalam tatasusunan struktur bersarang boleh diakses menggunakan gabungan sintaks titik, nama medan dan kaedah Lajur:

Sintaks titik

<code>df.select($"nestedArrayColumn.foo").show</code>
Salin selepas log masuk

API Bingkai Data

<code>df.select($"nestedArrayColumn.vals".getItem(index).getItem(innerIndex)).show</code>
Salin selepas log masuk

Nota Tambahan

  • Medan dalam jenis yang ditentukan pengguna (UDT) boleh diakses menggunakan UDF.
  • Untuk sesetengah operasi yang melibatkan data bersarang, mungkin perlu untuk meratakan corak atau mengembangkan koleksi.
  • Lajur JSON boleh disoal menggunakan fungsi get_json_object dan from_json.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan