Python运行MapReduce自定义mapper函数报tuple无loc属性错误如何解决
问题修复方案
错误原因
map()函数迭代列表a时,每次传入mapper_PR的参数Data是a的单个元素,结构为((节点ID, 初始PR值), 出边列表),你当前的函数索引嵌套多了一层,导致取值逻辑错误。- 执行代码中使用了
itertools模块但未提前导入,也会触发运行报错。
修复步骤
- 修改
defs.py中的mapper_PR函数,修正索引层级:
def mapper_PR(Data): node = Data[0][0] pr = Data[0][1] dest = Data[1] degree = len(dest) return [[i, pr/degree] for i in dest]
- 执行代码时提前导入
itertools模块,完整运行代码如下:
import itertools import defs a = [((1,1/4), [2,3,4]), ((2, 1/4), [3,4]), ((3,1/4), [1,4]), ((4,1/4),[2])] mapped_values = map(defs.mapper_PR, a) partition_value = list(itertools.chain(*mapped_values))
运行验证
修复后运行得到的partition_value结果为:
[[2, 0.08333333333333333], [3, 0.08333333333333333], [4, 0.08333333333333333], [3, 0.125], [4, 0.125], [1, 0.125], [4, 0.125], [2, 0.25]]
你提到的'tuple' object has no attribute 'loc'报错是索引层级错误触发的连锁异常,修复索引后即可解决,如果仍有该报错可检查是否误将pandas Series/DataFrame类型的对象传入了该映射函数。
内容的提问来源于stack exchange,提问作者ppotatomato
相关产品推荐
相关产品推荐

