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
from pyspark.sql import functions as dbf
dbf.map_zip_with(col1=<col1>, col2=<col2>, f=<f>)
parameter
parameter | Type | Description |
|---|---|---|
|
| Le nom de la première colonne ou une expression de colonne représentant la première carte. |
|
| Le nom de la deuxième colonne ou une expression de colonne représentant la deuxième carte. |
|
| 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
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())
[('A', 4), ('B', 6)]
Exemple 2 : Fusion de deux cartes avec des clés non concordantes.
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())
[('A', 1), ('B', 5), ('C', None)]