Hadoop Pig模式与类型异常

Hadoop Pig模式与类型异常,hadoop,apache-pig,Hadoop,Apache Pig,这是一个非常简单的演示,可以在0.11重现问题 ==testSchemaDATA=== 1_a 2_b 3_c 第一个脚本: a = load 'testSchemaDATA' as (str:chararray); a1 = foreach a generate flatten(STRSPLIT(str,'_',2)) as num; a2 = foreach a1 generate (int)num as num; dump a2; 这是正确的脚本,他回答: 一, 2. 三, 第二个错误

这是一个非常简单的演示,可以在0.11重现问题

==testSchemaDATA===

1_a
2_b
3_c
第一个脚本:

a = load 'testSchemaDATA' as (str:chararray);
a1 = foreach a generate flatten(STRSPLIT(str,'_',2)) as num;
a2 = foreach a1 generate (int)num as num;
dump a2;
这是正确的脚本,他回答:

一, 2. 三,

第二个错误的脚本是(两个脚本的唯一区别是a1语句的模式声明):

it报告 错误org.apache.pig.tools.grunt.grunt-错误1052: 无法将bytearray强制转换为int

我不知道该怎么解释。这是一个bug吗?

这将起作用:

a = load 'testSchemaDATA' as (str:chararray);
a1 = foreach a generate flatten(STRSPLIT(str,'_',2)) as (num:int,char:chararray);
a2 = foreach a1 generate num as num;
dump a2;
将为您提供以下输出:

(1)
(2)
(3)

将给出您的输出:

(a)
(b)
(c)
区别在于,在本例中,您显式地将STRSPLIT的结果转换为int和chararray。如果没有给出,它将默认为bytearray

如果您执行
a1=foreach a,则生成flatte(STRSPLIT(str,'''u',2')作为num
然后
描述a1
给出

a1: {num: bytearray}
如果你这样做
a1=foreach a生成展平(STRSPLIT(str,'''u',2))为(num,char)然后
描述a1
给出:

a1: {num: NULL,char: NULL}
在本例中,类型似乎为null。我不知道为什么会这样。如果有人能说出来,那就太好了

a1: {num: bytearray}
a1: {num: NULL,char: NULL}