集合:通过将函数应用于键值对,将两个给定的映射合并到单个映射中。 支持 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.Column 或 str |
表示第一个映射的第一列或列表达式的名称。 |
col2 |
pyspark.sql.Column 或 str |
第二列或表示第二个映射的列表达式的名称。 |
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)]