2015-10-28 94 views
0

我寫這個scala程序爲字數。和主類如下斯卡拉mapreduce WordCount程序

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與參數類型數組[字符串]一個主要方法,但Hadooop.aaa不會是一個可運行的程序。原因:主要方法必須具有確切的簽名(數組[String])單位「。

如何解決這個問題?另外我無法在RunConfiguration中加載這個類。請幫我解決這個問題。

+0

如果'main()'簽名必須是「(Array [String])Unit」,那麼你不能從它返回任何值。刪除你的返回值[0,1和2],看看會發生什麼。 – jwvh

+0

已移除並警告已修復。但不能在RunConfiguration中加載這個類。 –

+0

「但是無法在RunConfiguratio中加載此類」嘗試時會發生什麼?不要讓我們猜測 –

回答

2

它可能會生氣,你使用: Int你宣佈主要。

嘗試

def main(args:Array[String]) : Unit = { 
    //... 
} 

並與您取得退出代碼每個返回更換您的主要聲明,代替那些調用System.exit(1)System.exit(0)視具體情況而定。

我相信你一直在尋找更優雅的終結,但那應該做你想做的。