通过


map_zip_with

集合:通过将函数应用于键值对,将两个给定的映射合并到单个映射中。 支持 Spark Connect。

有关相应的 Databricks SQL 函数,请参阅 map_zip_with 函数

Syntax

from pyspark.databricks.sql import functions as dbf

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

参数

参数 类型 Description
col1 pyspark.sql.Columnstr 表示第一个映射的第一列或列表达式的名称。
col2 pyspark.sql.Columnstr 第二列或表示第二个映射的列表达式的名称。
f function 一个三元函数,用于定义如何合并两个映射中的值。 此函数应返回一个列,该列将用作生成的映射中的值。

退货

pyspark.sql.Column:一个新的映射列,其中每个键值对都是将函数应用于输入映射中的相应键值对的结果。

例子

示例 1:使用简单函数合并两个映射

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())
[('A', 4), ('B', 6)]

示例 2:将两个映射与不匹配的键合并

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())
[('A', 1), ('B', 5), ('C', None)]