3

乾燥ツリーを表すために使用するバイナリツリーをHDFSに書き込む必要があります。しかし、それを行うには、最初にBinaryTreeNodeクラスを作成する必要があります。これがツリーノードになります。これらは私のクラス属性です:

private String name;
private String attribute;
private String attType;
private String condition;
private String lines;
private BinaryTreeNode leftChild;
private BinaryTreeNode rightChild;

したがって、これらのノードを読み書きするためのwriteメソッドとreadFieldsメソッドを実装する必要があります。これらは私がしたことです:

public void write(DataOutput d) throws IOException 
{
    d.writeUTF(name);
    d.writeUTF(attribute);
    d.writeUTF(attType);
    d.writeUTF(condition);
    d.writeUTF(lines);
    //SOMETHIN FOR LEFT AND RIGHT CHILD
}

public void readFields(DataInput di) throws IOException 
{
    name=di.readUTF();
    attribute=di.readUTF();
    attType=di.readUTF();
    condition=di.readUTF();
    lines=di.readUTF();
    //SOMETHIN FOR LEFT AND RIGHT CHILD
}

BinaryTreeNode read(DataInput in) throws IOException
{
     BinaryTreeNode ob = new BinaryTreeNode();
     ob.readFields(in);
     return ob;
}

私が思いつかないのは、2つの子ノードの書き込みと読み取りの方法です。ツリーは再帰的に構築され、すべてのノードに0〜2の子があることに注意してください。したがって、後の目的は、属性BinaryTreeNoderootを持つBinaryTreeクラスを作成することです。ありがとう

4

2 に答える 2

2

HDFSに二分木を書く必要があります

必要なのは、ツリーを保存してロードする方法だけです。

HDFSを使用する理由は何ですか?HDFSは、あらゆる種類のデータ/ファイルを保存できる分散ファイルシステムです。グラフを大規模に効果的に保存および取得するための多くのコードを記述しました。

OrientDBNeo4jなどのグラフ指向データベースからグラフを保存および取得できます。

また、 Apache GiraphApache HamaGoldenOrbなどのオープンソースフレームワークがあります。Javaプログラムから対話するためのバインディングもあるかもしれません。

于 2011-12-25T07:21:54.450 に答える
1

わかりました、私は解決策を見つけました。それが十分に効率的かどうかはわかりませんが、機能します。これが私がしたことです。これらは私のクラス定義にあります:

    public void write(DataOutput d) throws IOException
    {
      d.writeUTF(name);
      d.writeUTF(attribute);
      d.writeUTF(attType);
      d.writeUTF(condition);
      d.writeUTF(lines);
      ObjectWritable left=new ObjectWritable(BinaryTreeNode.class,leftChild);
      left.write(d);
      ObjectWritable right=new ObjectWritable(BinaryTreeNode.class,rightChild);
      right.write(d);
    }

    public void readFields(DataInput di) throws IOException
    {
      name=di.readUTF();
      attribute=di.readUTF();
      attType=di.readUTF();
      condition=di.readUTF();
      lines=di.readUTF();
      leftChild=(BinaryTreeNode) ObjectWritable.readObject(di, new Configuration());
      rightChild=(BinaryTreeNode) ObjectWritable.readObject(di, new Configuration());

    }

そして、これは私がそれらを使用する方法です:

書くために:

      BinaryTreeNode bla=new BinaryTreeNode();
      //set the attributes
      ObjectWritable obj=new ObjectWritable(BinaryTreeNode.class,bla);
      obj.write(dos);

読むために:

      BinaryTreeNode bla=new BinaryTreeNode();
      bla= (BinaryTreeNode) ObjectWritable.readObject(in, conf);

これは正常に機能します。これで、ルートを保存するだけで、決定木を作成して保存できるようになりました。:D

于 2011-12-27T17:25:36.873 に答える