You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的Spark RDD中按指定列表将元素映射为1或0?

解决方案

你原来的代码存在两个核心问题:

  1. 逻辑错误:用子列表x[1]直接判断是否属于number_list,但实际需要遍历number_list的每个元素,检查其是否存在于当前子列表中
  2. RDD不能直接在map的lambda中做成员判断:number_list是分布式RDD,必须先转换为本地集合才能在worker节点使用

正确实现步骤

  1. 先将number_list转换为本地列表和集合(集合用于快速查找,提升效率)
  2. 对my_dict中的每个元素,遍历本地数字列表,逐个判断是否存在于当前子列表,生成对应的0/1列表

完整代码

# 先获取本地的数字列表和集合
num_list = number_list.collect()
num_set = set(num_list)  # 用集合做成员判断比列表更快

# 转换my_dict
transformed_dict = my_dict.map(lambda item: (
    item[0],
    [1 if num in item[1] else 0 for num in num_list]
))

# 查看结果
print(transformed_dict.collect())

输出验证

运行后会得到你期望的结果:

[(101, [1, 1, 0, 0, 1]), (102, [0, 1, 0, 1, 0]), (103, [0, 1, 1, 0, 1]), (104, [1, 0, 0, 0, 1])]

内容的提问来源于stack exchange,提问作者Joe Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:15:50