云计算与分布式系统练习——hadoop
给定两个字符串S1和S2,S1和S2之间的相似度,记为Jaccard(S1,S2) = |G.S1 ∩ G.S2|/|G.S1∪G.S1|,其中,G.S1为字符串S1的N元模型表示(N-Gram),其使用一个长度为N的窗口从左到右把划分成若干个等长(长度为N)的字符串。
为了避免出现S1字符串长度小于N的情况,可以为S1增加N-1个#作为前缀和N-1个$作为后缀。例如字符串Gorbachev和字符串Gorbechyov的二元模型可以分别表示为{#G, Go, or, rb, ba, ac, ch, he, ev, v$}和{#G, Go, or, rb, be, ec, ch, hy, yo, ov, v$}。因此,Jaccard(“Gorbachev”,“ Gorbechyov”) = 5/15 = 1/3。
题目要求
使用Hadoop实现两个文本数据集之间的相似度连接操作。输入:字符串集合R,字符串集合S,相似度阈值θ,N。
输出:
T = {<r,s>|r∈R, s∈S, Jaccard (r,s) >= θ}
说明:相似度阈值设置为0.3,N设置为3,读懂已给出的代码,并补全未给出的代码部分。
####测试说明
输入的字符集格式如下:
2000001 Gabriela Nicolescu
2000002 Hanifa Boucheneb
2000003 Donald P. Cox
2000004 Youssif B. Al-Nashif
2000005 Salim Hariri
按照以下格式输出结果:
(2000006,2000014) 1.0
(2000008,2000054) 0.45