gpt4 book ai didi

斯卡拉/Hadoop : Specifying Context for Reducer

转载 作者:可可西里 更新时间:2023-11-01 14:14:40 25 4
gpt4 key购买 nike

在开始使用 Scoobi 或 Scrunch 之前,我想我应该尝试仅使用 Hadoop (0.20.1) 的 java 绑定(bind)将 WordCount 移植到 scala (2.9.1)。

最初,我有:

class Map extends Mapper[LongWritable, Text, Text, IntWritable] {
@throws[classOf[IOException]]
@throws[classOf[InterruptedException]]
def map(key : LongWritable, value : Text, context : Context) {
//...

编译正常,但给了我一个运行时错误:

java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org.apache.hadoop.io.LongWritable

环顾四周后,我发现这是因为我没有定义正确的 map 方法(应该是因为缺少 override ), 所以我将其固定为:

override def map(key : LongWritable, value : Text, 
context : Mapper[LongWritable, Text, Text, IntWritable]#Context) {

瞧,没有运行时错误。

但后来我查看了作业输出,意识到我的 reducer 没有运行。

所以我查看了我的 reducer,发现 reduce 签名和我的映射器有同样的问题:

class Reduce extends Reducer[Text, IntWritable, Text, IntWritable] {
@throws[classOf[IOException]]
@throws[classOf[InterruptedException]]
def reduce(key : Text, value : Iterable[IntWritable], context : Context) {
//...

所以我猜测身份 reduce 由于不匹配而被使用。

但是当我尝试更正 reduce 的签名时:

override def reduce(key: Text, values : Iterable[IntWritable], 
context : Reducer[Text, IntWritable, Text, IntWritable]#Context) {

我现在遇到编译器错误:

[ERROR] /path/to/src/main/scala/WordCount.scala:32: error: method reduce overrides nothing
[INFO] override def reduce(key: Text, values : Iterable[IntWritable],

所以我不确定我做错了什么。

最佳答案

乍一看,确保 values 是 java.lang.Iterable,而不是 scala Iterable。要么导入 java.lang.Iterable,要么:

override def reduce(key: Text, values : java.lang.Iterable[IntWritable], context : Reducer[Text, IntWritable, Text, IntWritable]#Context)

关于斯卡拉/Hadoop : Specifying Context for Reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com