Aller au contenu principal

map_zip_with

Collection : Merge deux cartes données en une seule carte en appliquant une fonction aux paires clé-valeur. Prend en charge Spark Connect.

Pour la fonction Databricks SQL correspondante, consultez la fonctionmap_zip_with.

Syntaxe

Python
from pyspark.sql import functions as dbf

dbf.map_zip_with(col1=<col1>, col2=<col2>, f=<f>)

parameter

parameter

Type

Description

col1

pyspark.sql.Column OU str

Le nom de la première colonne ou une expression de colonne représentant la première carte.

col2

pyspark.sql.Column OU str

Le nom de la deuxième colonne ou une expression de colonne représentant la deuxième carte.

f

function

Une fonction ternaire qui définit comment Merge les valeurs des deux cartes. Cette fonction doit renvoyer une colonne qui sera utilisée comme valeur dans la carte résultante.

parameter

Type

Description

col1

pyspark.sql.Column OU str

Le nom de la première colonne ou une expression de colonne représentant la première carte.

col2

pyspark.sql.Column OU str

Le nom de la deuxième colonne ou une expression de colonne représentant la deuxième carte.

f

function

Une fonction ternaire qui définit comment Merge les valeurs des deux cartes. Cette fonction doit renvoyer une colonne qui sera utilisée comme valeur dans la carte résultante.

Renvoie

pyspark.sql.Column: Nouvelle colonne de carte où chaque paire clé-valeur est le résultat de l'application de la fonction aux paires clé-valeur correspondantes dans les cartes d'entrée.

Exemples

Exemple 1 : Fusion de deux cartes avec une fonction simple

Python
from pyspark.sql import functions as dbf
df = spark.createDataFrame([
(1, {"A": 1, "B": 2}, {"A": 3, "B": 4})],
("id", "map1", "map2"))
row = df.select(
dbf.map_zip_with("map1", "map2", lambda _, v1, v2: v1 + v2).alias("updated_data")
).head()
sorted(row["updated_data"].items())
Output
[('A', 4), ('B', 6)]

Exemple 2 : Fusion de deux cartes avec des clés non concordantes.

Python
from pyspark.sql import functions as dbf
df = spark.createDataFrame([
(1, {"A": 1, "B": 2}, {"B": 3, "C": 4})],
("id", "map1", "map2"))
row = df.select(
dbf.map_zip_with("map1", "map2",
lambda _, v1, v2: dbf.when(v2.isNull(), v1).otherwise(v1 + v2)
).alias("updated_data")
).head()
sorted(row["updated_data"].items())
Output
[('A', 1), ('B', 5), ('C', None)]