簡體   English   中英

程序在具有hadoop的AWS EMR上失敗(在本地計算機上正常)

[英]Program fails on AWS EMR with hadoop (OK on local machine)

我正在嘗試在mapper程序中使用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

我可以在不需要在本地計算機上安裝Fuzzywuzzy的情況下運行map-reduce程序。 當我在AWS EMR上嘗試相同操作時,它失敗了。

我壓縮了Fuzzywuzzy程序包(“ temp.zip”),並在我的地圖程序中將其調用。 我也將temp.zip文件復制到從屬節點。

!/ usr / bin / python
導入重新導入sys導入os導入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嗎?

通過將Fuzzywuzzy安裝文件復制到主節點和從屬節點,然后手動安裝Fuzzywuzzy,可以使Fuzzywuzzy工作

python setup.py install

即使成功,pip install也不會安裝Fuzzywuzzy。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM