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

wpx232ag  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(351)

我有一个输入关系 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语句中生成任意嵌套的结构?公平的假设是 FLATTEN -ed类型——也就是说,没有包、Map等的任意嵌套元组。
谢谢你的帮助!
编辑:我有点接近了。这几乎奏效了:

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)右边有一个额外的元组“层”,这在语法上是不可能匹配的。

zxlwwiss

zxlwwiss1#

一种可能是

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

相关问题