如何找到两袋(A,B)之间的差异,其中A和B都不是唯一的?

时间:2015-09-12 17:14:47

标签: hadoop apache-pig avro

假设我有一个NEW包含很多对(A,B):

Pair 1: { "A" : { "long" : someInteger1 }, "B" : { "int" : someInteger2 } }

Pair 2: { "A" : { "long" : someInteger3 }, "B" : { "int" : someInteger4 } }

......

我有另一个包OLD,几乎与第一个包相同(它可能有一些丢失,不同或额外的一对),我想通过计算两者中相同数量的对来比较OLD和NEW袋。 行李中可能有多对(A,B)具有相同的A或相同的B.

我已经尝试使用Pig的东西:

  1. 在A和B生成的哈希码上加入OLD和NEW 计算A和B匹配的数量。伯爵只是约 我所期待的一半。
  2. 在(A,B)上加入OLD和NEW并计算那里有多少结果 是。计数只是我预期的一半(与上面的1相同)。
  3. 在A上加入OLD和NEW并计算B匹配的方式。对于一些 原因,联合的结果似乎有奇怪的重复:

    结果1:{“A_new”:{“long”:someInteger1},“B_new”:{“int”:someInteger2},“A_old”:{“long”:someInteger1},“B_old”:{“int “:someInteger2}}

    结果2:{“A_new”:{“long”:someInteger1},“B_new”:{“int”:someInteger2},“A_old”:{“long”:someInteger1},“B_old”:{“int “:someInteger3}}

    结果3:{“A_new”:{“long”:someInteger1},“B_new”:{“int”:someInteger2},“A_old”:{“long”:someInteger1},“B_old”:{“int “:someInteger4}}

    结果4:{“A_new”:{“long”:someInteger1},“B_new”:{“int”:someInteger2},“A_old”:{“long”:someInteger1},“B_old”:{“int “:someInteger5}}

1 个答案:

答案 0 :(得分:1)

DataFu有一个很棒的Pig UDF库,您可以使用它。我认为SetDifference()正是您所寻找的。