我的问题可能很愚蠢,但请耐心等待一段时间。
在Java中,int是数据类型,而Integer是将int包装的类型。如果我们谈论Hadoop,则可以使用IntWritable代替Integer。 (如果没错)
在研究大多数时间时,它说,在hadoop中,他们使用IntWritable,因为它可以很好地通过网络传输大量数据。没关系..!
我在执行此操作时遇到的一件事,无论是Integer还是IntWritable,它们包裹int有何不同?在哪里可以看到可以显示int包装差异的代码?如果我看到IntWritable类或Integer类,它们似乎是一个简单的类,但是当int被Integer或IntWritable束缚时,会发生什么区别呢?
我现在正在考虑将int作为Java的核心类型,并寻找int放在后端的Integer或IntWritable中会发生什么?它如何变为Integer或IntWritable?希望我的问题解决。 :)
最佳答案
是,有一点不同。IntWritable
是Integer
的Hadoop变体,已针对Hadoop环境中的序列化进行了优化。 integer
将使用默认的Java序列化,这在Hadoop环境中非常昂贵。
IntWritable实现Comparable<IntWritable>, Writable, WritableComparable<IntWritable>
接口(interface)。
Comparable
是接口(interface),其抽象方法使我们可以灵活地比较两个对象。 Writable
用于将数据写入本地磁盘,它是一种序列化格式。一个人可以在Hadoop中实现自己的可写对象。Java的序列化在系统上过于庞大且速度慢。这就是为什么
Hadoop社区已将Writable部署到位。
WritableComparable
是上述两个接口(interface)的组合。 更多参考:
Why does Hadoop need classes like Text or IntWritable instead of String or Integer?
对于
Integer
类的内部结构:https://www.geeksforgeeks.org/java-lang-integer-class-java/
IntWriable
的Hadoop文档:http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/io/IntWritable.html