使用hadoop在aws emr上的程序失败(在本地计算机上正常)

dhxwm5r4  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(354)

我试图在mapper程序中使用python的fuzzyfuzzy包来计算编辑距离。我的程序在本地机器上运行良好,但在aws emr集群上失败。我尝试了以下两种方法(在本地计算机和aws emr集群上):
1通过安装fuzzyfuzzy:
我在主节点和从节点上使用pip安装了fuzzyfuzzy。如果我注解掉下面代码的最后4行,我不会得到任何错误。但是我想在我的程序中使用fuzzyfuzzy。

!/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不安装fuzzyfuzzy
我可以运行上面的map reduce程序,而不用在本地机器上安装fuzzyfuzzy。当我在aws emr上尝试同样的方法时失败了。
我压缩了fuzzyfuzzy包(“temp.zip”)并在Map程序中调用它。我还将temp.zip文件复制到从属节点。
!/usr/bin/python文件
导入重新导入系统导入操作系统导入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上运行fuzzyfuzzy吗?

cgvd09ve

cgvd09ve1#

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

python setup.py install

pip安装没有安装fuzzyfuzzy,即使它是成功的。

相关问题