我是Hadoop编程的新手。抱歉,这是一个愚蠢的问题,请帮助我。

对于我的项目,我需要形成一个自定义数据类型,其中包含(键,值)对中值的链接列表。这是我的课。

public class Nikhil implements Writable {
  String str;
  Nikhil next;
  Nikhil() {
    this.str="";
    this.next=null;
  }

  public void add(String t) {
    if(this.str.equals("")) {
      this.str=t;
      this.next=null;
      return;
    } else {
      Nikhil n=new Nikhil();
      n.str=t;
      n.next=null;
      Nikhil temp=this;
      while(temp.next!=null)
      {
        temp=temp.next;
      }
      temp.next=n;
      return;
    }
  }

  public String get()
  {
    if(!this.str.toString().equals(""))
    {
      String result="";
      result=this.str.toString();
      Nikhil temp=this.next;
      while(temp!=null)
      {
        result=result+","+temp.str.toString();
        temp=temp.next;
      }
      return result;
    }
    else
      return "";
  }

  @Override
  public void readFields(DataInput in) throws IOException {
    str=in.readUTF();
    //some code for reading next pointer
  }

  @Override
  public void write(DataOutput out) throws IOException {
    out.writeUTF(str);
    //some code for next
    //
  }
}

请更正以下代码,并帮助我解决问题。在hadoop中将树形成为自定义数据类型的方法是什么?

最佳答案

    @Override
    public void readFields(DataInput in) throws IOException {
        str = in.readUTF();
        //some code for reading next pointer
        if (!"".equals(str)) {
            boolean existNext = in.readBoolean();
            if (existNext) {
                next = new Nikhil();
                next.readFields(in);
            }
        }
    }

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeUTF(str);
        //some code for next
        //
        if (!"".equals(str)) {
            boolean existNext = null != next;
            out.writeBoolean(existNext);
            if (existNext) {
                next.write(out);
            }
        }
    }

也许上面的代码是您想要的。但是您代码的其他部分,尤其是add()并不是那么严格。您最好进行更多优化。

07-24 09:53