Scala mapreduce WordCount程序

时间:2015-10-28 07:00:52

标签: scala hadoop mapreduce

我为Word计数编写了这个scala程序。主要课程如下:

object aaa{
  def main(args:Array[String]) : Int = {
    val conf = new Configuration()
    val otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs
    if (otherArgs.length != 2) {
      println("Usage: wordcount <in> <out>")
      return 2
    }
    val job = new Job(conf, "word count")
    job.setJarByClass(classOf[TokenizerMapper])
    job.setMapperClass(classOf[TokenizerMapper])
    job.setCombinerClass(classOf[IntSumReducer])
    job.setReducerClass(classOf[IntSumReducer])
    job.setOutputKeyClass(classOf[Text])
    job.setOutputValueClass(classOf[IntWritable])
    FileInputFormat.addInputPath(job, new Path(args(0)))
    FileOutputFormat.setOutputPath(job, new Path((args(1))))
    if (job.waitForCompletion(true)) 0 else 1
 }
}

我在这里收到警告: &#34; aaa有一个主参数类型为Array [String]的方法,但是Hadooop.aaa不是一个可运行的程序。原因:main方法必须有精确的签名(Array [String])Unit&#34;

如何解决这个问题?此外,我无法在RunConfiguration中加载此类。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可能对使用: Int声明为main的地方感到愤怒。

尝试用

替换你的main声明
def main(args:Array[String]) : Unit = {
    //...
}

对于带有退出代码的每次退货,请根据具体情况调用System.exit(1)System.exit(0)

我确信你正在寻找一个更优雅的终止,但这应该是你想要的。