MapReduce Python - 解压缩的值太多了

时间:2017-03-19 23:56:21

标签: python hadoop mapreduce

我正在尝试将两个映射器合并为本教程中的一个 - 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的新手。我该如何纠正?

谢谢。

1 个答案:

答案 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())