gpt4 book ai didi

apache-pig - pig : How to join data on a key in a nested bag

转载 作者:行者123 更新时间:2023-12-04 08:44:38 24 4
gpt4 key购买 nike

我只是想将 data2 的值合并到 'value1'/'value2' 键上的 data1 data1data2(注意

的嵌套结构

简单吧?在面向对象的代码中,它是一个嵌套的 for 循环。但在 Pig 中,感觉就像解决魔方一样。

data1 = 'item1'     111     { ('thing1', 222, {('value1'),('value2')}) }
data2 = 'value1' 'result1'
'value2' 'result2'

A = load 'data6' as ( item:chararray, d:int, things:bag{(thing:chararray, d1:int, values:bag{(v:chararray)})} );
B = load 'data7' as ( v:chararray, r:chararray );

expected: 'item1', 111, {('thing1', 222, {('value1','result1'), ('value2','result2')})}
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^

对于好奇:data1 来自一个面向对象的数据存储,这解释了双重嵌套(简单的面向对象格式)。

最佳答案

听起来你基本上只是想做一个连接(从问题中不清楚这应该是 INNER、LEFT、RIGHT 还是 FULL。我认为 @SNeumann 基本上有书面答案,但我会添加一些代码到让它更清晰。

假设数据如下:

data1 = 'item1'     111     { ('thing1', 222, {('value1'),('value2')}) }
...
data2 = 'value1' 'result1'
'value2' 'result2'
...

我会做类似的事情(未测试):

A = load 'data6' as ( item:chararray, d:int, things:bag{(thing:chararray, d1:int, values:bag{(v:chararray)})} );
B = load 'data7' as ( v:chararray, r:chararray );
A_flattened = FOREACH A GENERATE item, d, things.thing AS thing; things.d1 AS d1, FLATTEN(things.values) AS value;
--This looks like:
--'item1', 111, 'thing1', 222, 'value1'
--'item1', 111, 'thing1', 222, 'value2'
A_B_joined = JOIN A_flattened BY value, B BY v;
--This looks like:
--'item1', 111, 'thing1', 222, 'value1', 'value1', 'result1'
--'item1', 111, 'thing1', 222, 'value1', 'value2', 'result2'
A_B_joined1 = FOREACH A_B_JOINED GENERATE item, d, thing, d1, A_flattened::value AS value, r AS result;
A_B_grouped = GROUP A_B_joined1 BY (value, result);

从那里开始,随心所欲地重新打包应该是微不足道的。

编辑:上面应该使用'.'。作为元组的投影运算符。我已将其切换。它还假设 things 是一个大元组,但事实并非如此。这是一袋一件元素。如果 OP 从不打算在那个包里放不止一件元素,我强烈建议改用元组并加载为:

A = load 'data1' as (item:chararray, d:int, things:(thing:chararray, d1:int, values:bag{(v:chararray)})); 

然后基本上按原样使用其余代码(注意:仍未测试)。

如果绝对需要一个包,那么整个问题就会改变,当包中有多个 things 对象时,OP 想要发生什么就变得不清楚了。如前所述,包投影也相当复杂 here

关于apache-pig - pig : How to join data on a key in a nested bag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16711420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com