Heim > Datenbank > MySQL-Tutorial > Wie frage ich Spark SQL-DataFrames mit verschachtelten Datenstrukturen (Maps, Arrays, Structs) ab?

Wie frage ich Spark SQL-DataFrames mit verschachtelten Datenstrukturen (Maps, Arrays, Structs) ab?

Patricia Arquette
Freigeben: 2025-01-21 11:36:09
Original
142 Leute haben es durchsucht

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

Verwenden Sie Spark SQL, um Datenrahmen komplexer Typen abzufragen

Einführung

Spark SQL unterstützt die Abfrage komplexer Typen, die in Datenrahmen wie Karten und Arrays gespeichert sind. In diesem Handbuch werden die Syntax und Methoden für den Zugriff auf und die Bearbeitung verschachtelter Datenstrukturen beschrieben.

Zugriffsarray

Column.getItem-Methode

<code>df.select($"arrayColumn".getItem(index)).show</code>
Nach dem Login kopieren

Wobei Index die Position des erforderlichen Elements im Array darstellt.

Hive-Syntax für eckige Klammern

<code>sqlContext.sql("SELECT arrayColumn[index] FROM df").show</code>
Nach dem Login kopieren

Benutzerdefinierte Funktion (UDF)

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

df.select(get_ith($"arrayColumn", lit(index))).show</code>
Nach dem Login kopieren

Arrays filtern und transformieren

Spark 2.4 führt integrierte Funktionen wie Filter, Transformation, Aggregation und Array_*-Funktionen ein, die zum Bearbeiten von Arrays verwendet werden können:

Filter

<code>df.selectExpr("filter(arrayColumn, x -> x % 2 == 0) arrayColumn_even").show</code>
Nach dem Login kopieren

transformieren

<code>df.selectExpr("transform(arrayColumn, x -> x + 1) arrayColumn_inc").show</code>
Nach dem Login kopieren

Aggregation

<code>df.selectExpr("aggregate(arrayColumn, 0, (acc, x) -> acc + x, acc -> acc) arrayColumn_sum").show</code>
Nach dem Login kopieren

Andere Array-Funktionen

  • array_distinct
  • array_max
  • abflachen
  • arrays_zip
  • array_union
  • Scheiben

Zugriffszuordnung

Column.getField-Methode

<code>df.select($"mapColumn".getField("key")).show</code>
Nach dem Login kopieren

Wobei Schlüssel den Namen des erforderlichen Schlüssels in der Karte darstellt.

Hive-Syntax für eckige Klammern

<code>sqlContext.sql("SELECT mapColumn['key'] FROM df").show</code>
Nach dem Login kopieren

Vollständige Pfadpunktsyntax

<code>df.select($"mapColumn.key").show</code>
Nach dem Login kopieren

Benutzerdefinierte Funktion (UDF)

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

df.select(get_field($"mapColumn", lit("key"))).show</code>
Nach dem Login kopieren

map_*-Funktionen

  • map_keys
  • map_values

Zugriffsstruktur

Vollständige Pfadpunktsyntax

<code>df.select($"structColumn.field").show</code>
Nach dem Login kopieren

Unter anderem stellt Feld den Namen des erforderlichen Felds in der Struktur dar.

Auf verschachteltes Strukturarray zugreifen

Auf Felder in verschachtelten Strukturarrays kann mit einer Kombination aus Punktsyntax, Feldnamen und der Column-Methode zugegriffen werden:

Punktsyntax

<code>df.select($"nestedArrayColumn.foo").show</code>
Nach dem Login kopieren

DataFrame-API

<code>df.select($"nestedArrayColumn.vals".getItem(index).getItem(innerIndex)).show</code>
Nach dem Login kopieren

Zusätzliche Hinweise

  • Auf Felder in benutzerdefinierten Typen (UDT) kann über UDFs zugegriffen werden.
  • Bei einigen Vorgängen mit verschachtelten Daten kann es erforderlich sein, das Muster zu verflachen oder die Sammlung zu erweitern.
  • JSON-Spalten können mit den Funktionen get_json_object und from_json abgefragt werden.

Das obige ist der detaillierte Inhalt vonWie frage ich Spark SQL-DataFrames mit verschachtelten Datenstrukturen (Maps, Arrays, Structs) ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage