存在Integer和IntWritable类型

时间:2018-09-17 05:32:22

标签: java hadoop

我的问题可能很愚蠢,但请耐心等待一段时间。

在Java中,int是数据类型,而Integer是将int包装的类型。如果我们谈论Hadoop,则可以使用IntWritable代替Integer。 (如果没错)

虽然大部分时间都在研究,但是在hadoop中,他们使用IntWritable的原因是IntWritable可以很好地通过网络传输大量数据。没关系..!

我在执行此操作时遇到的一件事,无论是Integer还是IntWritable,它们包裹int有何不同?在哪里可以看到可以显示int包装差异的代码?如果我看到IntWritable类或Integer类,它们似乎是一个简单的类,但是当int被Integer或IntWritable束缚时,会发生什么区别呢?

我现在正在考虑将int作为Java的核心类型,并寻找int放在后端的Integer或IntWritable中会发生什么?它如何变为Integer或IntWritable?希望我的问题得到解决。 :)

1 个答案:

答案 0 :(得分:4)

是的,有区别。

IntWritableInteger的Hadoop变体,已针对Hadoop环境中的序列化进行了优化。 integer将使用默认的Java序列化,这在Hadoop环境中非常昂贵。

IntWritable实现Comparable<IntWritable>, Writable, WritableComparable<IntWritable>接口。

  • Comparable 是该接口的抽象方法,使我们可以灵活地比较两个对象。
  • Writable 用于将数据写入本地磁盘,它是一种序列化格式。一个人可以在Hadoop中实现自己的可写对象。 Java的序列化过于庞大且在系统上运行缓慢。这就是为什么 Hadoop社区已将Writable放在适当的位置。
  • WritableComparable 是以上两个界面的组合。

更多参考资料:

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