【问题标题】:Scala mapreduce WordCount programScala mapreduce WordCount 程序
【发布时间】:2015-10-28 07:00:51
【问题描述】:

我为字数计算编写了这个 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
 }
}

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

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

【问题讨论】:

  • 如果main() 签名必须是“(Array[String])Unit”,那么您不能从中返回任何值。删除您的返回值 [0,1 和 2] 看看会发生什么。
  • 已删除并修复了警告。但无法在 RunConfiguration 中加载此类。
  • "但无法在 RunConfiguratio 中加载此类" 尝试时会发生什么?不要让我们猜测
  • 在运行配置中使用搜索按钮搜索时未列出主类。如果明确指定完整路径,则“错误:无法找到或加载主类 aaa.scala”。

标签: scala hadoop mapreduce


【解决方案1】:

它可能对您在声明 main 时使用 : Int 感到愤怒。

尝试用

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

对于每个带有您所做的退出代码的返回,根据具体情况将其替换为对 System.exit(1)System.exit(0) 的调用。

我确定您正在寻找更优雅的终止,但这应该符合您的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多