在Pig中创建单列元组?

时间:2014-08-16 03:17:50

标签: hadoop apache-pig

我尝试使用FOREACH .. GENERATE语句生成一个唯一值为单列元组的关系。为了便于说明,我尝试执行以下操作:

x = LOAD 'data.json' USING JsonLoader('a:chararray, b:chararray') AS (a:chararray, b:chararray);
y = foreach x generate (a) as value: (a: chararray);

但是,此代码会产生以下错误:

Incompatable field schema: declared is "value:tuple(a:chararray)", infered is "a:chararray"

(a)包含在更多括号中没有任何区别。使用tuple(a)是语法错误,因为tuple语法仅在类型的上下文中有效。

然而,修改代码稍有作用:

y = foreach x generate (a, 0) as value: (a: chararray, b: int);

这表明在语法上没有办法在Pig中创建单值元组。这真是一种耻辱 - 这是一种非常有用的模式。

有没有办法在Pig中创建一个我失踪的单列元组?

1 个答案:

答案 0 :(得分:2)

生成 a 的方式不正确。它应该如下:

x = LOAD 'data.json' USING JsonLoader('a:chararray, b:chararray') AS (a:chararray, b:chararray);
y = foreach x generate (a) as value:chararray;
dump y;

如果要生成元组,可以使用TOTUPLE内置UDF

y = foreach x generate TOTUPLE(a) as value:(a:chararray);

您的代码中的问题是,您有chararray并尝试将其转换为元组。 LHS数据类型应与RHS兼容/等于执行数据类型转换。