You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MapReduce中的Key是按值传递还是按引用传递?

Hadoop Reducer 键对象传递规则说明

该现象是Hadoop MapReduce框架的对象复用优化机制导致的,具体传递规则如下:

  • 为了降低序列化/反序列化开销、减少JVM垃圾回收压力,框架向Reducer传递输入键值对时,不会为每一组不同的键创建新的Writable对象实例。
  • 在Reducer迭代处理所有输入键的整个生命周期内,框架只会创建一个Text类型的键对象实例,每次处理新的键时,仅修改该实例内部存储的字节内容,不会分配新的内存空间。
  • 你在reduce方法中拿到的key参数,本质上始终是同一个内存地址的引用,直接存入ArrayList后,后续框架修改该实例的内容时,列表中所有之前存入的引用指向的内容会同步被覆盖,最终所有元素的key都和最后一个处理的键一致。

你采用new Text(key)的处理方式是正确的,该操作会基于当前键的内容生成一个全新的Text实例,新实例的内存地址和框架复用的键实例完全独立,不会被后续的内容修改覆盖,因此可以正确存储所有键的实际值。

内容的提问来源于stack exchange,提问作者Marc-9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:48:04