2014-10-06 84 views
0

我试图在作业的输出中写入多个值。为此,我使用实现接口Writable的自定义写入。这种自定义可写,我称之为CompositeWritable实现了读写的两种方法。当我运行作业时,输出如下所示:Hadoop自定义可写

key [email protected] 
lean [email protected] 
likely [email protected] 

我在想什么?在工作规范中,我将输出值类设置为CompositeWritable。还有其他设置我错过了吗?

+0

当你说“输出”你在看输出文件吗?你使用什么OutputFormat?这似乎是从java.lang.Object继承的“toString”的输出。 – 2014-10-06 22:06:16

+0

是的,输出文件。不指定输出格式,我想它是TextOutputFormat。 – user3111525 2014-10-06 22:10:02

+0

尝试明确设置'job.setOutputFormatClass(TextOutputFormat.class)',但结果相同。 – user3111525 2014-10-06 22:10:28

回答

1

TextOutputFormat似乎依赖于可写的toString方法(see line 80)。在你的CompositeWritable类上实现一个合理的toString覆盖,例如你可以在包含的项目上调用字符串并用分隔符将它们附加在一起。

1

你缺少

@Override 
    public String toString() { 
     return ___________; 
    } 

例子:

@Override 
     public String toString() { 
      return key+","+value; 
     } 

这里项和值分隔使用 “” seperator.You可以使用任何分隔符为你的愿望。