Hadoop Pig模式与类型异常
这是一个非常简单的演示,可以在0.11重现问题 ==testSchemaDATA===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. 三, 第二个错误
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}