我的问题可能很愚蠢,但请耐心等待。
在 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 中实现自己的 Writables。 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/
Hadoop 文档 IntWriable
:
http://hadoop.apache.org/docs/r2.7.1/api/org/apache/hadoop/io/IntWritable.html
关于java - Integer 和 IntWritable 类型的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52361265/