我正在尝试在mapper程序中使用python' s fuzzywuzzy package来计算编辑距离。我的程序在本地计算机上运行正常但在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文件复制到slave节点。
!的/ usr /斌/蟒
进口重新
导入系统
进口口
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?
答案 0 :(得分:0)
我可以通过将fuzzywuzzy安装文件复制到主节点和从节点然后手动安装fuzzywuzzy来获得模糊工作
python setup.py install
尽管pp install成功了,但pip install并没有安装fuzzywuzzy。