我需要写一个二进制树到HDFS,我将用它来表示一个desicion树。但为了做到这一点,我首先需要创建一个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。感谢
答案 0 :(得分:2)
我需要写一个二进制树到HDFS
我只需要一种保存和加载树的方法。
使用HDFS的原因是什么? HDFS是一种分布式文件系统,可以在其上存储任何类型的数据/文件。您已经编写了大量代码来大规模地存储和检索图形。
您可以在面向图形的数据库中存储和检索图形,例如OrientDB和Neo4j。
此外,还有开源框架,如Apache Giraph,Apache Hama和GoldenOrb。可能还存在从Java程序进行交互的绑定。
答案 1 :(得分: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