解决PySpark映射列警告:Spark 3.0后getItem传列方式已弃用
解决Spark 3.0+中
getItem传列作为Key的弃用警告问题 修改方案
直接将map_expr.getItem(F.col('car'))替换为map_expr[F.col('car')]即可规避警告,修改后的完整代码如下:
from itertools import chain import pyspark.sql.functions as F data = [(1, 'BMW'), (2, 'Ford'), (3, 'honda'), (4, 'Cadillac'), (5, 'Fiat')] df = spark.createDataFrame(data, ["ID", "car"]) data_dict = {'honda': 2.0, 'toyota': 2.9, 'BMW': 6, 'Dodge': 55, 'Ford': 99} map_expr = F.create_map([F.lit(x) for x in chain(*data_dict.items())]) # 改用方括号索引语法替代getItem df.withColumn('x', map_expr[F.col('car')]).display()
说明
警告提示明确指出,Spark 3.0开始不再支持用getItem接收列作为Key,官方推荐使用column[key]的索引语法。这种写法不仅符合Spark后续版本的规范,也更简洁直观。
对于不存在于映射字典中的值(比如示例中的Cadillac、Fiat),新列x会返回null,和原代码的行为完全一致。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

