我正在尝试将两个映射器合并为本教程中的一个 - https://www.knowbigdata.com/blog/multiplying-matrix-using-mapreduce。给定文本文件输入:
1 1 6 L
1 2 5 L
1 5 8 L
2 3 9 R
..
其中L和R表示它是来自左或右矩阵。这是我的代码:
n = 3;
l = 3;
for line in sys.stdin:
if 'L' in line:
(i, k, v) = re.split("[ \t]+", line.strip());
for j in range(1, l + 1):
print("%s %s %d\t%s L" % (i, k, j, v));
else:
(k, j, v) = re.split("[ \t]+", line.strip());
for i in range(1, n + 1):
print("%d %s %s\t%s R" % (i, k, j, v));
我收到此错误:Value error: too many values to unpack (expected 3)
我是Python和MapReduce的新手。我该如何纠正?
谢谢。
答案 0 :(得分:1)
问题是,re.split函数将返回输入的4个值的列表。您正在尝试解压缩这4个值并将它们分配给3个变量。
>>> line = "1 1 6 L\n"
>>> re.split("[ \t]+", line.strip())
['1', '1', '6', 'L']
如果要丢弃最后一个值,通常的做法是在Python中使用下划线作为palceholder变量:
i, j, k, _ = re.split("[ \t]+", line.strip())