将对象写入hadoop hdfs问题

时间:2013-12-30 06:34:33

标签: java hadoop mapreduce hdfs

我正在尝试将对象写入hdfs。

Split currentsplit = new Split();
Path p = new Path("C45/mysavedobject");
ObjectOutputStream oos = new ObjectOutputStream(fs.create(p));
oos.writeObject(currentsplit);
oos.close();

但我无法获得确切的对象值。

Path p = new Path("C45/mysavedobject");
Split curntsplit = null;
ObjectInputStream ois = new ObjectInputStream(fs.open(p));
try {
    curntsplit = (Split) ois.readObject();
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
 ois.close();

显示重复的对象值。

在司机中我得到了:

objjjjjjj in driver pck.Split@14da173c

将对象写入文件并在驱动程序本身内回读后,我得到一个备用对象值。

objjjjjj in mysavedobject pck.Split@62eade0

我希望我的Mapper代码中有驱动程序对象。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您的自定义Split对象(pck.Split)没有定义toString方法,所以您看到的是类名,后跟内存中的地址(因为Java没有其他方式向您显示字符串值那个对象)。

只需将toString方法实现添加到自定义Split类并重新运行 - 现在您应该能够确认写入和读取对象是否具有相同的内容。