我试图用Scala编写一个Hadoop Mapper类。作为起点,我参考了《Hadoop权威指南》中的一个Java示例,并尝试将其移植到Scala。
原始的Java类继承自org.apache.hadoop.mapreduce.Mapper
:
public class MaxTemperatureMapper
extends Mapper<LongWritable, Text, Text, IntWritable>
并覆盖该方法
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException
这个方法被调用并正常工作(我使用单元测试进行了测试,然后使用yarn运行它)。
我尝试将其转换为Scala:
class MaxTemperatureMapperS extends Mapper[LongWritable, Text, Text, IntWritable]
然后是这个方法。
@throws(classOf[IOException])
@throws(classOf[InterruptedException])
override def map(key: LongWritable, value: Text, context: Context): Unit =
{
...
}
但是Scala编译器会报错:
error: method map overrides nothing.
我认为在Scala和Java中这两种方法的签名相同,但显然我漏掉了什么。你能给我一些提示吗?