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
相关产品推荐
相关产品推荐

