メインコンテンツまでスキップ

マップ_zip_with

コレクション: キーと値のペアに関数を適用して、指定された 2 つのマップを 1 つのマップにマージします。Spark Connect をサポートします。

対応する Databricks SQL 関数については、 map_zip_with関数を参照してください。

構文

Python
from pyspark.databricks.sql import functions as dbf

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

パラメーター

パラメーター

Type

説明

col1

pyspark.sql.Column または str

最初の列の名前または最初のマップを表す列式。

col2

pyspark.sql.Column または str

2 番目の列の名前、または 2 番目のマップを表す列式。

f

function

2 つのマップの値をマージする方法を定義する三項関数。この関数は、結果のマップの値として使用される列を返す必要があります。

戻り値

pyspark.sql.Column: 新しいマップ列。各キーと値のペアは、入力マップ内の対応するキーと値のペアに関数を適用した結果です。

例1 : 単純な関数で2つのマップをマージする

Python
from pyspark.databricks.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)]

例2 : 不一致なキーを持つ2つのマップをマージする

Python
from pyspark.databricks.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)]