我有一个输入关系X
,如下所示:
a:chararray, b:chararray, c:(d:chararray, e:(f:chararray, g:chararray))
我想在单个generate语句中再次在语法上再次生成 exact 元组。这不起作用,但希望它能给我一个很好的例子:
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的单个生成语句中生成这样的任意嵌套结构?假设一个完全FLATTEN
- ed类型是公平的,也就是说,任意嵌套的元组没有包,地图等。
感谢您的帮助!
编辑:我离得更近了。这个几乎有效:
x = LOAD 'data.json' USING JsonLoader('a:chararray, b:chararray') AS a:chararray, b:chararray;
y = foreach x generate (a, b, (a, b, (a, b))) as (a:chararray, b:chararray, tuple1:(a:chararray, b:chararray, tuple2:(a:chararray, b:chararray)));
在语义上,这是正确的事情,它在语法上是有效的,但它给了我这个错误:
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)右边有一个额外的元组“层”,在语法上是不可能匹配的。
答案 0 :(得分:2)
一种方法可能是
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));