猪的UDF区分大小写。但是当我将Flatten用作“FLATTEN”或“变平”时,它正在工作。这意味着扁平化不是UDF。为什么?为什么要在PIG中“拼合”而不是UDF?
1
A
回答
1
FLATTEN运算符在语法上看起来像UDF,但它实际上是一个运算符,它以UDF不能的方式更改元组和结构。展开un-nests元组以及袋子。这个想法是一样的,但每种结构的操作和结果都不相同。
对于元组来说,flatten用元组的字段代替元组。例如,考虑具有形式(a,(b,c))的元组的关系。表达式GENERATE $ 0,flatten($ 1)将导致该元组变为(a,b,c)。
对于手提包来说,情况会变得更加复杂。当我们取出一个包时,我们创建了新的元组。如果我们有一个由({(b,c),(d,e)})形式的元组构成的关系,并且我们应用GENERATE flatten($ 0),则最终得到两个元组(b,c)和(d,e)所示。当我们删除一个包中的嵌套层次时,有时会导致交叉产品发生。例如,考虑具有由GROUP运算符通常产生的形式(a,{(b,c),(d,e)})的元组的关系。如果我们应用表达式GENERATE $ 0,将这个元组展开($ 1),我们将创建新的元组:(a,b,c)和(a,d,e)。
你可以找到更多的信息link