java - 将对象写入hadoop hdfs问题

标签 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代码。

为什么会这样呢?

最佳答案

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

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

关于java - 将对象写入hadoop hdfs问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20834538/

相关文章:

docker - Hue 访问 HDFS : bypass default hue. ini?

hadoop - hive是什么,是数据库吗?

apache-spark - 映射减少问题,按值计算

java - 如何在 Hadoop MapReduce java API 中使用 Java 断言?

java - 在后台对 Eddystone Beacon 使用react

java - 删除eclipse中的双倍间距

java - 如何重写GenericServlet?

java - Eclipse Intellisense 操作

hadoop - 在 Hadoop 中完成 Map 和 Reduce 任务的时间

hadoop map-reduce : how to deploy non-jar files