Apache pig 如何在PIG中将列转换为元组

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问题,它涉及到将表的列转换为元组,以便将它们传递给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)
,等等