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
Libérer: 2025-01-21 11:36:09
original
194 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

transformer

<code>df.selectExpr("transform(arrayColumn, x -> x + 1) arrayColumn_inc").show</code>
Copier après la connexion

agrégat

<code>df.selectExpr("aggregate(arrayColumn, 0, (acc, x) -> acc + x, acc -> acc) arrayColumn_sum").show</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Syntaxe complète des points de chemin

<code>df.select($"mapColumn.key").show</code>
Copier après la connexion

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>
Copier après la connexion

fonctions map_*

  • map_keys
  • map_values

Structure d'accès

Syntaxe complète des points de chemin

<code>df.select($"structColumn.field").show</code>
Copier après la connexion

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>
Copier après la connexion

API DataFrame

<code>df.select($"nestedArrayColumn.vals".getItem(index).getItem(innerIndex)).show</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal