gpt4 book ai didi

hadoop - TreeMap 大小在 MapReduce 代码中始终为 1

转载 作者:可可西里 更新时间:2023-11-01 15:31:10 26 4
gpt4 key购买 nike

我正在尝试编写代码,以获取访问该网站的前 10 个 IP 地址。我有示例日志,第一个 MR 代码的输出如下所示:

01-dynamic-c.rotterdam.luna.net 1
01-dynamic-c.wokingham.luna.net 28
02-dynamic-c.wokingham.luna.net 13
03-dynamic-c.wokingham.luna.net 15
04-dynamic-c.rotterdam.luna.net 22

现在我想在 2nd MR 作业中计算 TopN,但 mapper 中的 TreeMap 大小始终为 1。看起来 TreeMap 上的 put 操作不断替换我的旧条目。

private TreeMap<Text, Integer> repToRecordMap = new TreeMap<Text, Integer>();
int count = 0;

@Override
public void map(Text key, Text value, Context context)
throws IOException, InterruptedException {
System.out.println("key ==> " + key);
System.out.println("value ==> "
+ Integer.parseInt(value.toString()));
System.out.println("size ==> " + repToRecordMap.size());

repToRecordMap.put(key, Integer.parseInt(value.toString()));

}

这是 System.out 在日志中打印的内容:

key ==> ***.novo.dk
value ==> 16
**size ==> 1**
key ==> 007.thegap.com
value ==> 45
**size ==> 1**
key ==> 01-dynamic-c.rotterdam.luna.net
value ==> 1
**size ==> 1**

每次我有一个新 key 但大小始终为 1 时,这意味着它会不断用新 key 替换我的旧 key 。请帮我看看为什么会这样?

谢谢

最佳答案

您应该将Text 对象转换为String 并定义Map<String, Integer> . MapReduce 框架在可能时重用可序列化对象以进行内存优化。我认为这就是您的情况,Text 对象是相同的(在对象级别),即使它们代表不同的 String

关于hadoop - TreeMap 大小在 MapReduce 代码中始终为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com