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

Spark RDD调用distinct()报TypeError: unhashable type: 'list'求助

Spark RDD去重报错:TypeError: unhashable type: 'list'

问题背景

你的RDD数据结构:

[['Tosa de la Llosada', '42.55129', '1.64243'],
 ['Riu de la Llosada', '42.53619', '1.61625'],
 ['Obaga de la Llosada', '42.54673', '1.6326'],
 ['Emprius de la Llosada', '42.5463', '1.6213'],
 ['Basers de la Llosada', '42.55113', '1.63183'],]

执行以下去重代码时触发错误:

rdd.map(lambda x:[x[0].lower(),x[1],x[2]]).distinct().collect()

核心报错:TypeError: unhashable type: 'list'

错误原因

Spark的distinct()操作依赖元素的可哈希性来识别重复项——它通过计算元素哈希值实现分组和去重逻辑。但Python中的list是可变序列,属于不可哈希类型,无法作为哈希表的键使用,因此执行distinct()时会抛出该错误。

解决方法

将map操作返回的list替换为不可变的tuple(tuple是可哈希类型),修改后的代码如下:

# 直接返回tuple执行去重
rdd.map(lambda x:(x[0].lower(),x[1],x[2])).distinct().collect()

如果最终需要将结果转回list格式,可以在distinct()后再添加一层map转换:

# 去重后转回list
rdd.map(lambda x:(x[0].lower(),x[1],x[2])).distinct().map(list).collect()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:34