给定我的 userid,itemid 格式的输入数据:
raw: {userid: bytearray,itemid: bytearray}
dump raw;
(A,1)
(A,2)
(A,4)
(A,5)
(B,2)
(B,3)
(B,5)
(C,1)
(C,5)
grpd = GROUP raw BY userid;
dump grpd;
(A,{(A,1),(A,2),(A,4),(A,5)})
(B,{(B,2),(B,3),(B,5)})
(C,{(C,1),(C,5)})
我想生成每个组中项目的所有组合(顺序不重要)。我最终打算对我组中的项目执行 Jaccard 相似性。
理想情况下,我的二元组将被生成,然后我将输出展平为:
(A, (1,2))
(A, (1,3))
(A, (1,4))
(A, (2,3))
(A, (2,4))
(A, (3,4))
(B, (1,2))
(B, (2,3))
(B, (3,5))
(C, (1,5))
代表用户 ID 的字母 ABC 并不是输出所必需的,我只是为了说明目的而展示它们。从那里,我会计算每个二元组的出现次数以计算杰卡德。我很想知道是否有其他人正在使用 pig 进行类似的相似性计算(对不起!)并且已经遇到过这种情况。
我查看了猪教程随附的 NGramGenerator,但它与我想要完成的内容并不匹配。我想知道也许 python 流 UDF 是要走的路。