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

在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?希望我的问题解决。 :)

最佳答案

是,有一点不同。
IntWritableInteger的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

    09-26 18:27