【发布时间】:2014-09-04 11:22:04
【问题描述】:
我对在工作中使用 Pig 比较陌生。我有一个巨大的表格(367 万个条目),其中包含字段 - id、feat1:value、feat2:value ... featN:value。其中 id 是文本,feat_i 是特征名称,value 是给定 id 的特征 i 的值. 每个元组的特征数量可能会有所不同,因为它是稀疏表示。
例如这是数据中 3 行的示例
- id1 f1:23 f3:45 f7:67
- id2 f2:12 f3:23 f5:21
- id3 f7:30 f16:8 f23:1
现在的任务是将具有共同特征的查询分组。我应该能够获得具有任何功能重叠的那些查询集。 我已经尝试了几件事。 CROSS 和 JOINS 造成数据爆炸,reducer 卡住。我不熟悉调节 GROUP BY 命令。
有没有办法在 GROUP BY 中编写一个条件,以便它只选择那些具有共同特征的查询。
对于上述行,结果将是:
- id1,id2
- id1,id3
谢谢
【问题讨论】:
-
在你的例子中,id2和id3在哪里有共同的特征?
-
对不起,你是对的,我刚刚更正了答案。
-
PIG 中没有可以跨行工作的操作。在这种情况下,JOIN 或 CROSS 是不可避免的。其他解决方案是使用 UDF 并将所有数据作为单行传递给 UDF。同样在 UDF 中,您最终会执行 JOIN(对数据进行 2 次循环),因此我看不到使用 UDF 的任何性能改进。 IMO,包含 360 万行的关系的 SelfJoin 对于 Hadoop 来说并没有那么大。
-
我尝试了自我加入,它只是坐在那里,有 1 个减速器。我将尝试使用 PARALLEL 运行它。在 Map-Reduce 上执行此操作会更好,因为我花了两天时间来执行此操作,集群有 12 个节点,内存足够,但仍然没有得到余弦相似度!
标签: join hadoop mapreduce apache-pig