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));