publicclassMyArrayWritableextendsArrayWritable{ publicMyArrayWritable(){ super(SomeComplexClass.class); //首先构造函数中写需要存放的对象的类 } } publicMyArrayWritable(String[] strings){ super(SomeComplexClass.class); Text[] texts = new Text[strings.length]; for (int i = 0; i < strings.length; i++) { texts[i] = new Text(strings[i]); } set(texts); //这个是set父类的value } //由于是自定义的对象,因此需要写toString函数。 //否则在存入的时候会存入对象的地址,而不是想要的信息。
public String toString(){ StringBuilder sb = new StringBuilder(); //使用this.get()获取strings的长度 for (int i = 0; i < this.get().length; i++) { //some code } return sb.toString(); } //最后在reduce的时候,就可以存入一个array的value了。 //例如这样,在reduce时,有一个复杂对象的values。可以用arraylist将其加入,最后变成string数组放到MyArrayWritable中。 ArrayList<String> al = new ArrayList<String>(); for (SomeComplexClass val : values) { al.add(val.toString()); } context.write(key, new MyArrayWritable((String[]) al.toArray(new String[al.size()])));