没有实现这一点的内置函数。然而,你应该可以用纯拉丁语来做这件事,但是这要比任何类型的udf慢得多。你必须使用 FLATTEN 以及 UNION 这样地:
-- A: {key: chararray, vals1: {(one:int, two:int)}, vals2: {(one:int, two:int)}}
B = FOREACH A GENERATE key, FLATTEN(vals1) ;
C = FOREACH A GENERATE key, FLATTEN(vals2) ;
D = UNION B, C ;
-- Group and filter out 'key' from the result bag.
E = FOREACH (GROUP D BY key)
GENERATE group As key, D.(one, two) AS joined_bag ;
注意,这比一个简单的python udf要难看得多,比如:
# Make sure to include the appropriate ouputSchema
def join_bags(BAG1, BAG2):
return BAG1 + BAG2
用法如下:
B = FOREACH A GENERATE key, pythonUDFs.join_bags(vals1, vals2) ;
2条答案
按热度按时间jexiocij1#
查看datafu的bagconcat自定义项。它正是你想要的。
文档中的示例:
a64a0gku2#
没有实现这一点的内置函数。然而,你应该可以用纯拉丁语来做这件事,但是这要比任何类型的udf慢得多。你必须使用
FLATTEN
以及UNION
这样地:注意,这比一个简单的python udf要难看得多,比如:
用法如下:
如果
UNION
在嵌套中允许FOREACH
s、 但遗憾的是,事实并非如此。