PySpark按customerID匹配train表字段到test 缺失值填充WHITE
报错原因
你原来的写法不符合PySpark的运行逻辑:两个独立的DataFrame未做关联的情况下,无法直接跨表引用列做逐行判断,你写的F.col("customerID")!=train["customerID"]逻辑上是要按行对齐两个表的字段做比较,和你需要的「匹配customerID取值」的需求完全不符,所以会报错。
正确实现方案
最简洁高效的方式是通过左连接+空值填充实现,代码如下:
import pyspark.sql.functions as F # 仅提取train表需要的关联字段和分类字段,避免冗余列冲突 train_category_map = train.select("customerID", "customerCategory") # test表左连接分类映射表,匹配到customerID的会自动带上对应分类值 test = test.join(train_category_map, on="customerID", how="left") # 未匹配到的空值统一填充为WHITE test = test.fillna({"customerCategory": "WHITE"})
如果train表的customerID量级非常小(万级以内),也可以用广播映射的方式实现,性能会更高,但上述左连接方案是通用场景下的最优选择,可读性和可维护性都更好。
内容的提问来源于stack exchange,提问作者JAdel
相关产品推荐
相关产品推荐

