Java 如何在hadoop的reduce中将genericWritable恢复为我的自定义可写?

Java 如何在hadoop的reduce中将genericWritable恢复为我的自定义可写?,java,hadoop,Java,Hadoop,我想使用GenericWritable在map reduce流中实现同一个键的不同值类型。例如,我为不同的值类型创建了两个用户定义的类,下面是我的一个用户定义的值类: public user_def_Value1 extends writableComparable<user_def_Value1> { private var1; private var2; ...... public void setAsCopy(user_d

我想使用GenericWritable在map reduce流中实现同一个键的不同值类型。例如,我为不同的值类型创建了两个用户定义的类,下面是我的一个用户定义的值类:

public user_def_Value1 extends writableComparable<user_def_Value1> {
       private var1;
       private var2;
       ......
       public void setAsCopy(user_def_Value1 other) {
              var1.set(other.var1);
              var2.set(other.var2);
       }
       ......
}
public user_def_Value1扩展了可写性{
私人var1;
私人var2;
......
公共作废设置副本(用户定义值1其他){
var1.set(其他var1);
var2.set(其他var2);
}
......
}
然后,我使用GenericWritable将两个用户定义的值类作为映射器的输出值。这是我的GenericWritable实现

public class GenericValue extends GenericWritable  {

    private static Class<? extends Writable>[] CLASSES = null;

    static {
        CLASSES = (Class<? extends Writable>[]) new Class[] {
            user_def_Value1.class,
            user_def_Value2.class
        };
    }

    //this empty initialize is required by hadoop
    public GraphCleanGenericValue() {
    }

    public GraphCleanGenericValue(Writable instance) {
        set(instance);
    }

    @Override
    protected Class<? extends Writable>[] getTypes() {
        return CLASSES;
    }

    @Override
    public String toString() {
        return get().toString();
    }
}
公共类GenericValue扩展了GenericWritable{

私有静态类您可以使用
instanceof
。 例如:

Writable value = values.next().get();
if (value instanceof SomeClassName) {
    // do something;
} 
else if (value instanceof AnotherClassName) {
    // do something;
}

这个问题并不是关于Hadoop的,而是关于Java中的变量类型。有大约个变量,它们在不同程度上都很糟糕

Writable value = values.next().get();
if (value instanceof SomeClassName) {
    // do something;
} 
else if (value instanceof AnotherClassName) {
    // do something;
}