这是我的映射器函数标题行
public static class PageMapper extends Mapper<Text, Text, Text, Text>
这是我的化简器函数头
public static class PageReducer extends Reducer`<Text, Text, Text, Text>
编译代码时
PageRank.java:30:错误:此处没有接口
extends Mapper <Object, Text, Text, Text>
PageRank.java:61:错误:此处没有接口
public static class PageReducer extends Reducer<Text, Text, Text, Text>
为什么这里不接受映射器和化简器。谁能帮忙
,Mapper
和Reducer
是接口,而不是类。您实现接口,而不是类。除此之外,请记住,Mapper
和 Reducer
接口都实现了泛型,并期望有两个键值对。例如:
Mapper<Key1,Value1,Key2,Value2>
您可以从这里阅读有关映射器和化简器的更多信息:
org.apache.hadoop.mapred.Mapper
org.apache.hadoop.mapred.Reducer
令人困惑的是,API 同时包含:1) 类 org.apache.hadoop.mapreduce.Reducer和2)界面org.apache.hadoop.mapred.Reducer
和
1)类没有实现接口2)类中的方法reduce与接口具有不同的签名3)MapReduce教程使用类Reducer,而不是接口。
我的猜测是,应该弃用两者之一,并且应该在某处提及最佳实践:1)实现接口org.apache.hadoop.mapred.Reducer,或2)扩展类org.apache.hadoop.mapreduce.Reducer