Maison >base de données >tutoriel mysql >Comment interroger des DataFrames Spark SQL avec des structures de données imbriquées (cartes, tableaux, structures) ?

Comment interroger des DataFrames Spark SQL avec des structures de données imbriquées (cartes, tableaux, structures) ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-21 11:36:09219parcourir

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

Utilisez Spark SQL pour interroger des trames de données de type complexe

Présentation

Spark SQL prend en charge l'interrogation de types complexes stockés dans des trames de données, tels que des cartes et des tableaux. Ce guide décrit la syntaxe et les méthodes d'accès et de manipulation des structures de données imbriquées.

Accès au tableau

Méthode Column.getItem

<code>df.select($"arrayColumn".getItem(index)).show</code>

Où, index représente la position de l'élément requis dans le tableau.

Syntaxe des crochets Hive

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

Fonction définie par l'utilisateur (UDF)

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

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

Filtrer et transformer des tableaux

Spark 2.4 introduit des fonctions intégrées telles que les fonctions de filtre, de transformation, d'agrégation et array_* qui peuvent être utilisées pour opérer sur des tableaux :

filtrer

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

transformer

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

agrégat

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

Autres fonctions de tableau

  • array_distinct
  • array_max
  • aplatir
  • arrays_zip
  • array_union
  • tranche

Cartographie des accès

Méthode Column.getField

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

Où key représente le nom de la clé requise dans la carte.

Syntaxe des crochets Hive

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

Syntaxe complète des points de chemin

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

Fonction définie par l'utilisateur (UDF)

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

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

fonctions map_*

  • map_keys
  • map_values

Structure d'accès

Syntaxe complète des points de chemin

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

Parmi eux, field représente le nom du champ obligatoire dans la structure.

Accéder au tableau de structures imbriquées

Les champs des tableaux à structure imbriquée sont accessibles en utilisant une combinaison de syntaxe de points, de noms de champs et de la méthode Column :

Syntaxe des points

<code>df.select($"nestedArrayColumn.foo").show</code>

API DataFrame

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

Notes supplémentaires

  • Les champs des types définis par l'utilisateur (UDT) sont accessibles à l'aide des UDF.
  • Pour certaines opérations impliquant des données imbriquées, il peut être nécessaire d'aplatir le modèle ou d'élargir la collection.
  • Les colonnes JSON peuvent être interrogées à l'aide des fonctions get_json_object et from_json.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn