0

我正在尝试在映射程序中使用 python 的fuzzywuzzy 包来计算编辑距离。我的程序在本地机器上运行良好,但在 AWS emr 集群上失败。我尝试了以下两种方法(在本地机器和 AWS EMR 集群上):

1.通过安装fuzzywuzzy:

我在主节点和从节点上都使用 pip 安装了fuzzywuzzy。如果我注释掉下面代码的最后 4 行,我不会收到任何错误。但我想在我的程序中使用fuzzywuzzy。

!/usr/bin/python  
import re
import sys
import os
import csv

desc_dict = {}
with open('Keys.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
            query_set = row

for line in sys.stdin:
  line = line.strip() 
  row = line.split(',')
  if(len(row)>2):
      desc_dict[(int(row[0]), row[1])] = (row[2].lower()).encode('utf-8')
from fuzzywuzzy import *
import fuzzywuzzy.fuzz
import fuzzywuzzy.utils
print fuzzywuzzy.fuzz.partial_ratio("this is a test", "this is a test!")

我得到以下错误:

 Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1

2.不安装fuzzywuzzy

我可以在 map-reduce 程序之上运行,而无需在本地机器上安装fuzzywuzzy。当我在 AWS EMR 上尝试相同时,它失败了。

我压缩了fuzzywuzzy 包(“temp.zip”)并在我的地图程序中调用它。我也将 temp.zip 文件复制到从节点。

!/usr/bin/python
import re import sys import os import csv

desc_dict = {}
with open('Keys.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
            query_set = row

for line in sys.stdin:
  line = line.strip() 
  row = line.split(',')
  if(len(row)>2):
      desc_dict[(int(row[0]), row[1])] = (row[2].lower()).encode('utf-8')

sys.path.insert(0,'temp.zip')
from fuzzywuzzy import *
import fuzzywuzzy.fuzz
print fuzzywuzzy.fuzz.partial_ratio("this is a test", "this is a test!")

我得到以下错误:

 Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1

有人可以指导我的代码有什么问题/如何在hadoop上运行fuzzywuzzy吗?

4

1 回答 1

0

我可以通过将fuzzywuzzy安装文件复制到主节点和从节点,然后手动安装fuzzywuzzy来工作

python setup.py install

pip install 没有安装fuzzywuzzy,即使它成功了。

于 2015-01-05T05:54:29.643 回答