2014-11-11 2 views
4

"각"탄성 맵리 듀스를 실행하는 경우 문자열에 대한 분산을 특정하는 캐시 파일 :오류 : 정의되지 않은 방법 나는 다음과 같은 오류가있어

Error: undefined method `each' for "s3n://dico-count-words/Cache/dicoClazz.p#dicoClazzCache.p":String 

나는 아마존에 맵리 듀스 알고리즘을 실행하려면 다음 명령 줄을 실행하면 탄성 맵리 듀스를 통해 EMR 클러스터, 분산 캐시 파일을 지정은 :

./elastic-mapreduce --create --stream \ 
> --input s3n://dico-count-words/Words \ 
> --output s3n://dico-count-words/Output \ 
> --mapper s3n://dico-count-words/Code/mapper.py \ 
> --reducer s3n://dico-count-words/Code/reducer.py \ 
> --log-uri s3n://dico-count-words/Logs \ 
> --cache s3n://dico-count-words/Cache/dicoClazz.p#dicoClazz.p 

은 내가 here의 지침을 따랐다. 분산 캐시 파일을 필요로하지 않는 다른 클러스터를 만들기 위해 유사한 명령을 실행하는 데 문제가 없었습니다. 또한 AWS 콘솔을 사용하여이 작업을 실행할 수있었습니다. 하지만 CLI를 통해 수행하는 것을 선호합니다. this one과 비슷한 루비의 문제 일 수 있다고 생각합니다. 하지만 루비에 대해서는 전혀 모른다. 그래서 추측 일 뿐이다. AWS를 사용하고 탄력적 인 mapreduce를 사용한 것도 이번이 처음입니다.
ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] 

은 당신이 오류가 어디에서 오는에 대한 아이디어가 있습니까 : 당신의 내용 이 루비의 버전이 내가 가진 무엇입니까? 그것을 고칠 어떤 제안?

감사합니다.

답변

3

each은 루비 String 클래스에는 사용할 수 없습니다.

예를 들어,의는 다음을 살펴 보자 :


x = "test" 
x.each {|character| puts character} 
>>>NoMethodError: undefined method `each' for "test":String 

이 코드에서 볼 수있는, 그리고 그 예상 할 수있는 무엇이다. 터미널에서 irb 열고 다음 시도 :

2.0.0-p247 :001 > x = "test" 
2.0.0-p247 :002 > x.each <now hit tab twice> 


2.0.0-p247 :003 > x.each_ 
x.each_byte  x.each_char  x.each_codepoint x.each_line 

당신은 위의 가까이에 뭔가를 볼 수 있습니다. 나는 루비 2.0.0-p247을 사용하고있다. 귀하의 버전이 다를 수 있습니다.

irb은 자동 완성을 지원합니다. 여기에 각각을 입력하기 시작했으며 irbeach으로 시작하는 사용 가능한 옵션을 기반으로 제안합니다. 보시다시피, 평범한 each은 실제로 옵션이 아닙니다. 대신 문자열을 문자 배열로 생각하십시오. 즉, "test"["t", "e", "s", "t"]과 같이 생각할 수 있습니다. 이 표현을 감안할 때, x.each_char이하는 일은 명백합니다. 문자열의 각 문자가 산출됩니다. 따라서 :

x.each_char {|c| puts c} 

물론 문자열의 각 문자를 인쇄합니다.

코드 및 데이터가 일부 이동하는 것을 볼 수 있다면 솔루션을 제안하는 것이 더 쉽습니다. 그러나 위의 설명은 String.each을 호출 할 때 오류가 발생하는 이유입니다.

도움이되기를 바랍니다.