Hadoop 在Pig中生成任意嵌套的元组?

Hadoop 在Pig中生成任意嵌套的元组?,hadoop,apache-pig,Hadoop,Apache Pig,我有一个输入关系X,如下所示: a:chararray, b:chararray, c:(d:chararray, e:(f:chararray, g:chararray)) 我想在一个generate语句中再次生成精确的元组。这不起作用,但希望它能为我所追求的提供一个很好的例子: foreach x generate a as a, b as b, (d as d, (f as f, g as g) as e) as c 实际上,我正在生成代码来对类型进行小的编辑,因此答案如下: fore

我有一个输入关系
X
,如下所示:

a:chararray, b:chararray, c:(d:chararray, e:(f:chararray, g:chararray))
我想在一个generate语句中再次生成精确的元组。这不起作用,但希望它能为我所追求的提供一个很好的例子:

foreach x generate a as a, b as b, (d as d, (f as f, g as g) as e) as c
实际上,我正在生成代码来对类型进行小的编辑,因此答案如下:

foreach x generate *
…在这里没有用

有没有一种语法可以让我在Pig中的单个generate语句中生成任意嵌套的结构?公平地说,我们可以假设一种完全展平的类型,即没有包、映射等的任意嵌套元组

谢谢你的帮助

编辑:我离得更近了一点。这几乎奏效了:

在语义上,这是正确的,在语法上是有效的,但它给了我一个错误:

Incompatable schema: left is "a:chararray,b:chararray,tuple1:tuple(a:chararray,b:chararray,tuple2:tuple(a:chararray,b:chararray))", right is "org.apache.pig.builtin.totuple_b_3:tuple(a:chararray,b:chararray,org.apache.pig.builtin.totuple_b_2:tuple(a:chararray,b:chararray,org.apache.pig.builtin.totuple_b_1:tuple(a:chararray,b:chararray)))"
…这对我来说似乎很奇怪,因为要么(a)两个模式应该匹配,要么(b)右侧有一个语法上不可能匹配的额外元组“层”

y = foreach x generate a,b,
    TOTUPLE(c.d,TOTUPLE(c.e.f,c.e.g)) 
         as c:(d:chararray,e:(f:chararray,g:chararray));

非常感谢。
TOTUPLE
功能正是我所缺少的!
y = foreach x generate a,b,
    TOTUPLE(c.d,TOTUPLE(c.e.f,c.e.g)) 
         as c:(d:chararray,e:(f:chararray,g:chararray));