加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 错误:运行elastic-mapreduce指定分布式缓存文件时,Stri

发布时间:2020-12-17 02:23:28 所属栏目:百科 来源:网络整理
导读:我有以下错误: Error: undefined method `each' for "s3n://dico-count-words/Cache/dicoClazz.p#dicoClazzCache.p":String 当我运行以下命令行以通过elastic-mapreduce在Amazon EMR集群上启动mapreduce算法时,指定分布式缓存文件: ./elastic-mapreduce --
我有以下错误:

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

当我运行以下命令行以通过elastic-mapreduce在Amazon EMR集群上启动mapreduce算法时,指定分布式缓存文件:

./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的ruby的问题.但我不知道关于ruby的东西,所以这只是猜测.这也是我第一次使用AWS和弹性mapreduce.
为了您的信息,这是我拥有的ruby版本:

ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]

您对该错误的来源有何看法?有什么建议可以解决吗?

非常感谢.

解决方法

每个都不适用于ruby 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

你应该看到接近上面的东西.我碰巧使用ruby 2.0.0-p247.您的版本可能有所不同

irb支持自动完成.在这里,我们开始键入每个,irb根据每个开头的可用选项提出建议.正如你所看到的,只是简单地说每个都不是一个选项.相反,将字符串视为一个字符数组.那就是“测试”可以被认为是像[“t”,“e”,“s”,“t”].鉴于这种表示,很明显x.each_char会做什么 – 它会产生字符串中的每个字符.从而:

x.each_char {|c| puts c}

当然会打印字符串的每个字符.

如果我们可以看到一些代码和数据通过它,那么为您建议一个解决方案会更容易.但是,上面的解释是您在String上调用.each时抛出错误的原因.

我希望这是有帮助的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读