簡體   English   中英

Apache Mahout中的WrongValueClass

[英]WrongValueClass in apache Mahout

我已經使用mahout編寫了mapreduce程序。 地圖輸出值為ClusterWritable 。當我在eclipse中運行代碼時,它運行沒有錯誤,但是當我在終端中運行rhe jar文件時,它顯示異常:

java.io.IOException: wrong value class: org.apache.mahout.math.VectorWritable is not class org.apache.mahout.clustering.iterator.ClusterWritable
at org.apache.hadoop.io.SequenceFile$Writer.append(SequenceFile.java:988)
at org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat$1.write(SequenceFileOutputFormat.java:74)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:498)
at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
at org.apache.mahout.clustering.canopy.CanopyMapper.cleanup(CanopyMapper.java:59)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
at org.apache.hadoop.mapred.Child.main(Child.java:170)

map中的輸出代碼為:

context.write(new Text(), new ClusterWritable());

但是我不知道為什么它說值類型是VectorWritable

運行Mapper,導致上面的stacktrace是Mahout的CanopyMapper,而不是您編寫的自定義代碼。 CanopyMapper.cleanup方法正在輸出(鍵:文本,值:VectorWritable)。 參見CanopyMapper.java

另請參見CanopyDriver.java及其buildClustersMR方法,其中配置了MR作業,映射器,化器以及適當的輸出鍵/值類。

您沒有聲明,所以我猜您在數據流管道中使用了多個MR作業。 檢查管道中每個作業的輸出是否是管道中下一個作業的有效/預期輸入。 考慮使用級聯/縮放來定義數據流(請參閱http://www.slideshare.net/melrief/scalding-programming-model-for-hadoop

考慮使用Mahout用戶郵件列表來發布Mahout相關問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM