gpt4 book ai didi

java - 使用 Hadoop 将列表作为值处理的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 14:37:05 24 4
gpt4 key购买 nike

我在完成我认为简单的任务时遇到了一些困难。我正在尝试迭代每行两个整数的文件。目标是获取第一个整数并将其用作键值,并将第二个整数的值存储为列表,但前提是该值不存在于列表中。因此,如果文件如下所示:

3 11    
4 7
5 10
5 6
6 5
6 10
3 11 #should be ignored

理想情况下,我最后会得到这样的结果:

3 [11]
4 [7]
5 [10, 6]
6 [5, 10]

就用于存储值的数据结构而言,解决此问题的最佳方法是什么?我知道我可以使用 ArrayWritable,但我不认为你可以动态地向它添加值。我不在乎键的顺序。

最佳答案

所以你的问题与经典的WordCount非常相似。例子。在您的情况下,虽然您不想发出总和,但只想发出一次值。至于数据结构本身,它已经在 Iterable 数据结构中,因此不需要将它们添加到新的数据结构中。您真正想做的只是以您需要的任何形式打印出来。下面我将解释我认为整个计划需要的内容。

对于您想要身份映射器的映射器,您希望按照您读入的方式输出键值对。这可以使用身份映射器来完成,或者如果您使用新的 API,则只需不指定一个即可, 0.23+。

对于Reducer,您应该执行类似于以下的操作。这只是将给定键的值附加到您想要的逗号,正如我之前提到的,您不需要将它们放入新的数据结构中,因为它们已经在一个数据结构中。一旦reducer完成附加键的值,它就会简单地发出带有逗号分隔值的键。

@Override
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
StringBuilder sb = new StringBuilder();
boolean first = true;
for (Text value: values){
if (!first) sb.append(", ");
else first = false;
sb.append(value);
}
context.write(key, new Text(sb.toString()));
}

关于java - 使用 Hadoop 将列表作为值处理的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388862/

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