Hadoop 在Pig中创建单列元组?

Hadoop 在Pig中创建单列元组?,hadoop,apache-pig,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:

我正在尝试使用
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中创建我缺少的单列元组?

生成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并试图将其转换为tuple。LHS数据类型应与RHS兼容/相等,以执行数据类型转换