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
Patricia ArquetteOriginal
2025-01-21 11:36:09215Durchsuche

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>

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>

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>

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>

transformieren

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

Aggregation

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

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>

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>

Vollständige Pfadpunktsyntax

<code>df.select($"mapColumn.key").show</code>

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>

map_*-Funktionen

  • map_keys
  • map_values

Zugriffsstruktur

Vollständige Pfadpunktsyntax

<code>df.select($"structColumn.field").show</code>

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>

DataFrame-API

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

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!

Stellungnahme:
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