scala mapreduce:[error]方法reduce不重写任何内容

o2g1uqev  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(373)

我被这个错误困住了,我写了我的tablereducer代码如下:

class treducer extends TableReducer[Text, IntWritable, ImmutableBytesWritable]{
    override def reduce(key: Text, values: java.lang.Iterable[IntWritable], context:Reducer[Text, IntWritable, ImmutableBytesWritable, Mutation]#Context){
        var i=0
        for (v <- values) {
          i += v.get()
        }
        val put = new Put(Bytes.toBytes(key.toString()))  // be sure to comment on toString.getBytes
        put.add(Families.cf.bytes , Qualifiers.count.bytes, Bytes.toBytes(i))

        context.write(null, put)
    }
}

通过此导入:

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.client.Get
import java.io.IOException
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase._
import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.io._
import org.apache.hadoop.hbase.mapreduce._
import org.apache.hadoop.io._
import scala.collection.JavaConversions._
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat
import org.apache.hadoop.mapreduce.Job
import org.apache.hadoop.mapreduce.Mapper
import org.apache.hadoop.mapreduce.ReduceContext
import org.apache.hadoop.mapreduce.Reducer

但有个错误:

[error] /home/ans4175/activator/scala-hbase/src/main/scala/com/example/Hello.scala:85: method reduce overrides nothing.
[error] Note: the super classes of class treducer contain the following, non final members named reduce:
[error] protected[package mapreduce] def reduce(x$1: org.apache.hadoop.io.Text,x$2: Iterable[org.apache.hadoop.io.IntWritable],x$3: org.apache.hadoop.mapreduce.Reducer[org.apache.hadoop.io.Text,org.apache.hadoop.io.IntWritable,org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.io.Writable]#Context): Unit
[error]     override def reduce(key: Text, values: java.lang.Iterable[IntWritable], context:Reducer[Text, IntWritable, ImmutableBytesWritable, Mutation]#Context){
[error]                  ^
[error] one error found
[error] (compile:compile) Compilation failed

我不知道有什么问题。我就这样跟帖了https://github.com/rawg/scala-hbase-wordcount/blob/master/src/main/scala/wordcountreducer.scala, https://github.com/vadimbobrov/calc/blob/master/src/main/scala/com/os/job/interpolatorreducer.scala
先谢谢你

xam8gpfp

xam8gpfp1#

当您重写子类中的某个方法时,这意味着父类中必须存在具有相同签名的相同方法,而您的程序仅在这一点上失败。
这类错误通常表示子类中方法的签名与父类中方法的签名不匹配,因此从技术上讲,您并没有重写任何内容,因此scala告诉您
[错误]/home/ans4175/activator/scala hbase/src/main/scala/com/example/hello。scala:85:方法reduce不重写任何内容。
注意:treducer类的超类包含以下名为reduce的非终结成员:

qvsjd97n

qvsjd97n2#

错误提供了您的答案。您错误地声明了其中一个参数。
编译器已指示第三个参数的类型为:

Reducer[Text,IntWritable,ImmutableBytesWritable,Writable]#Context

重写声明了具有此类型的第三个参数的方法:

Reducer[Text, IntWritable, ImmutableBytesWritable, Mutation]#Context

改变 MutationWritable 将允许编译器重写正确的方法。

相关问题