2017-03-19 78 views
0

我想在這個教程 - https://www.knowbigdata.com/blog/multiplying-matrix-using-mapreduce將兩個映射器合併爲一個。鑑於其具有文本文件輸入:MapReduce Python - 太多的值解壓

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

問題是,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()) 
相關問題