gpt4 book ai didi

java - 一对字符串作为reduce函数中的KEY - HADOOP

转载 作者:可可西里 更新时间:2023-11-01 16:03:50 27 4
gpt4 key购买 nike

你好,我正在使用 hadoop 框架在 java 中实现一个类似 facebook 的程序(我是新手)。主要思想是我有一个像这样的输入 .txt 文件:


Christina Bill,James,Nick,Jessica
James Christina,Mary,Toby,Nick
...

第一个是用户,逗号分隔的是他的 friend 。


在 map 函数中,我扫描文件的每一行并发出用户和他的每个 friend 一样

Christina Bill
Christina James

将转换为 (Christina,[Bill,James,..])...

但是在我的任务描述中,它指定 Reduce 函数将接收的元组作为键两个用户,同时被他们的 friend 关注,你会计算常见的,如果该数字等于或大于设置数字,比如 5,你可以放心地假设他们可以推荐不常见的 friend 。那么我究竟如何将一对用户传递给 reduce 函数。我认为 reduce 函数的输入必须与 map 函数的输出相同。我开始对此进行编码,但我认为这不是正确的方法。有什么想法吗?


public class ReduceFunction<KEY> extends Reducer<KEY,Text,KEY,Text> {
private Text suggestedFriend = new Text();

public void reduce(KEY key1,KEY key2, Iterable<Text> value1,Iterable<Text> value2,Context context){
}}

最佳答案

map 阶段的输出确实应该与 reduce 阶段的输入属于同一类型。这意味着,如果对 reduce 阶段的输入有要求,则必须更改映射器。

这个想法很简单:

map(user u,friends F):
for each f in F do
emit (u-f, F\f)

reduce(userPair u1-u2, friends F1,F2):
#commonFriends = |F1 intersection F2|

要实现此逻辑,您可以只使用 Text 键,在其中连接用户名,例如,在它们之间使用“-”字符。

请注意,在每个 reduce 方法中,您只会收到两个 friend 列表,假设每个用户在您的输入数据中出现一次。然后,您只需比较两个列表中的 friend 的常用名称即可。

关于java - 一对字符串作为reduce函数中的KEY - HADOOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512192/

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