Написать бинарное дерево в hadoop FS - PullRequest
3 голосов
/ 25 декабря 2011

Мне нужно написать двоичное дерево в 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 дочерних элемента.Поэтому моя более поздняя цель - иметь класс BinaryTree, который будет иметь атрибут BinaryTreeNode root.Спасибо

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

Мне нужно написать двоичное дерево в HDFS

Все, что мне нужно, это способ сохранить и загрузить мое дерево.

В чем причина перехода на HDFS? HDFS - это распределенная файловая система, в которой могут храниться данные / файлы любого типа. Вы написали много кода для эффективного хранения и извлечения графиков в больших масштабах.

Вы можете хранить и извлекать графики из баз данных, ориентированных на графы, таких как OrientDB и Neo4j .

Также существуют платформы с открытым исходным кодом, такие как Apache Giraph , Apache Hama и GoldenOrb . Также могут быть привязки для взаимодействия из программ Java.

1 голос
/ 27 декабря 2011

Хорошо, я нашел решение. Я не знаю, достаточно ли это эффективно, но это работает. Вот что я сделал. Это в моем определении класса:

    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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...