Apache pig 在Pig中,是否可以将一行与该行中的元组进行交叉连接?
我有一组数据显示用户、他们喜欢的水果收藏以及家乡:Apache pig 在Pig中,是否可以将一行与该行中的元组进行交叉连接?,apache-pig,cross-join,Apache Pig,Cross Join,我有一组数据显示用户、他们喜欢的水果收藏以及家乡: Alice\tApple:Orange\tSacramento Bob\tApple\tSan Diego Charlie\tApple:Pineapple\tSacramento 我想创建一个pig查询,该查询将不同城市中享受TYEP水果的用户数量关联起来,上面数据的查询结果如下所示: Apple\tSacramento\t2 Apple\tSan Diego\t1 Orange\tSacramento\t1 Pineapple\tSacr
Alice\tApple:Orange\tSacramento
Bob\tApple\tSan Diego
Charlie\tApple:Pineapple\tSacramento
我想创建一个pig查询,该查询将不同城市中享受TYEP水果的用户数量关联起来,上面数据的查询结果如下所示:
Apple\tSacramento\t2
Apple\tSan Diego\t1
Orange\tSacramento\t1
Pineapple\tSacramento\t1
我想不出的部分是如何将分割的水果行与同一行的其余数据交叉连接,因此:
Alice\tApple:Orange\tSacramento
变成:
Alice\tApple\tSacramento
Alice\tOrange\tSacramento
我知道我可以使用TOKENIZE将字符串'Apple:Orange'拆分为元组('Apple','Orange'),但我不知道如何获得该元组与行的其余部分('Alice')的叉积
我提出的一个蛮力解决方案是通过一个外部程序使用流来运行输入集合,并处理“交叉连接”以每行生成多行 但这似乎是不必要的。有更好的想法吗?您应该使用,它与
标记化
配合使用效果很好
b = FOREACH a GENERATE name, FLATTEN(TOKENIZE(fruits)) as fruit, city;
展平
拿起一个包,在不同的行中“展平”它TOKENIZE
将您的水果分成一个袋子(而不是像您所说的元组),然后flatte
执行您正在寻找的类似十字架的行为。我指出它是一个包而不是元组,因为flatte
是重载的,并且与元组的行为不同
我首先在规范的单词计数示例中学习了flatte
/TOKENIZE
技术,在该技术中,is标记一个单词,然后将单词平铺成行。您应该使用它,它与TOKENIZE
配合使用效果非常好
b = FOREACH a GENERATE name, FLATTEN(TOKENIZE(fruits)) as fruit, city;
展平
拿起一个包,在不同的行中“展平”它TOKENIZE
将您的水果分成一个袋子(而不是像您所说的元组),然后flatte
执行您正在寻找的类似十字架的行为。我指出它是一个包而不是元组,因为flatte
是重载的,并且与元组的行为不同
我首先在规范的单词计数示例中学习了
展平
/标记化
技术,其中is标记一个单词,然后将单词展平成行。我应该注意,这个问题与,我问的另一个问题是:在没有给出任何理由的情况下,对问题和答案的否决票是怎么回事?我不知道你在问什么,但是+1来“修正”沉默投票。@pst:谢谢你的信任票。我应该注意到,这个问题类似于,但不同于,我问的另一个问题是:在没有给出任何理由的情况下,对问题和答案的否决票是怎么回事?我不知道你在问什么,但是+1来“修正”安静的投票。@pst:谢谢你的信任票。太棒了——我完全错过了TOKENIZE
创建一个包而不是一个元组。谢谢太棒了——我完全错过了TOKENIZE
创建包而不是元组的过程。谢谢