Apache pig 如何在PIG中将列转换为元组
我有一个PIG问题,它涉及到将表的列转换为元组,以便将它们传递给UDF。详情如下:- 有一个结果“C”,如果我“转储C”,它看起来如下所示 (a1、b1、c1) (a2、b2、c2) 我想转换并提取2列的每一个组合,如下所示: (a1、a2、a3)、(b1、b2、b3)、(c1、c2、c3) 然后对每个可能的元组对调用一个UDF: 自定义项((a1、a2、a3)、(b1、b2、b3)) 自定义项((a1、a2、a3)、(c1、c2、c3)) 自定义项((c1、c2、c3)、(b1、b2、b3))Apache pig 如何在PIG中将列转换为元组,apache-pig,Apache Pig,我有一个PIG问题,它涉及到将表的列转换为元组,以便将它们传递给UDF。详情如下:- 有一个结果“C”,如果我“转储C”,它看起来如下所示 (a1、b1、c1) (a2、b2、c2) 我想转换并提取2列的每一个组合,如下所示: (a1、a2、a3)、(b1、b2、b3)、(c1、c2、c3) 然后对每个可能的元组对调用一个UDF: 自定义项((a1、a2、a3)、(b1、b2、b3)) 自定义项((a1、a2、a3)、(c1、c2、c3)) 自定义项((c1、c2、c3)、(b1、b2、b3))
如何在PIG中执行此操作?您可以使用
组获取给定“列”的所有值。。所有
,然后使用行李投影:
grpd = GROUP C ALL;
udfs =
FOREACH grpd
GENERATE
UDF(grpd.a, grpd.b),
UDF(grpd.a, grpd.c),
UDF(grpd.c, grpd.b);
但是,请注意,每列的值将存储在包中,而不是元组中。这是正确的,因为Pig中的关系不能保证记录以任何特定方式排序。因此,您的UDF应该比较包,而不是依赖于元素的顺序
但是,能够比较原来在同一行中的值可能很重要;i、 例如,将a1
与b1
匹配,等等。为此,您需要编写UDF以携带一个包,每个元组包含成对的元素an
和bn
。为此,请使用两列的行李投影:
grpd = GROUP C ALL;
udfs =
FOREACH grpd
GENERATE
UDF(grpd.(a,b)),
UDF(grpd.(a,c)),
UDF(grpd.(c,b));
同样,元组不一定是有序的,但您不应该依赖于这一事实。您的包将包含元组(a1,b1)
,(a2,b2)
,等等