PySpark中查询map列时如何返回默认值?
PySpark Map列取值时返回默认值的实现方法
当你用pyspark.sql.functions.create_map创建的map列,通过lookup_map[col("col1")]取值时,若键不存在会返回null。要替换成默认值,有几种实用方法:
方法1:用coalesce处理null
coalesce会返回第一个非null的值,刚好可以把不存在键时的null替换成默认值:
from pyspark.sql.functions import coalesce, col, lit # 用常量作为默认值 df = df.withColumn("result", coalesce(lookup_map[col("col1")], lit("默认文本"))) # 或者用现有列作为默认值 df = df.withColumn("result", coalesce(lookup_map[col("col1")], col("default_col")))
方法2:用when + isnull做条件判断
通过判断取值结果是否为null,手动指定默认值,兼容性更好(适合Spark低版本):
from pyspark.sql.functions import when, isnull, lit df = df.withColumn( "result", when(isnull(lookup_map[col("col1")]), lit(0)).otherwise(lookup_map[col("col1")]) )
方法3:Spark 3.0+ 用map_get直接指定默认值
Spark 3.0及以上版本提供了map_get函数,支持直接传入默认值参数,写法最简洁:
from pyspark.sql.functions import map_get, lit df = df.withColumn("result", map_get(lookup_map, col("col1"), lit("默认值")))
内容的提问来源于stack exchange,提问作者BBloggsbott
相关产品推荐
相关产品推荐

