【问题标题】:generating bigram combinations from grouped data in pig从 pig 中的分组数据生成二元组合
【发布时间】:2010-07-28 21:08:42
【问题描述】:

鉴于我的输入数据为 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 是否是可行的方法。

【问题讨论】:

  • 正在寻找完全相同的东西——找到答案了吗?
  • 介意在这里分享您的解决方案吗?

标签: hadoop apache-pig similarity recommendation-engine


【解决方案1】:

您肯定需要编写一个 UDF(用 Python 或 Java 都可以)。你会希望它在一个袋子上工作,然后输出一个袋子(如果你压扁一袋 touples,你会得到输出行,所以它会给你想要的输出)。

UDF 本身不会非常困难......类似于

letter, number = zip(*input_touples)
number = list(set(number)

for i in range(0,len(number)):
    for j in range(i,len(number)):
        res.append((number[i],number[j]))

然后只是投射东西并适当地返回它们。

如果您在制作简单的 python udf 时需要任何帮助,那还不错。在这里检查: http://pig.apache.org/docs/r0.8.0/udf.html

当然也可以在这里寻求更多帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 2021-09-26
    • 1970-01-01
    • 2022-12-20
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多