这是部分代码(在测试这部分之前省略的代码)
data3 = FOREACH data2 GENERATE group, SUM(data1.cpc) as cost:int;
data4 = ORDER data3 BY cost ASC;
DESCRIBE data4;
这对结果没有问题:
data4: {group: chararray,cost: int}
但是,如果我改变
描述数据4
至
转储数据4
,将导致错误:
2014-06-11 17:22:26,525 ERROR org.apache.pig.tools.pigstats.SimplePigStats:
ERROR: java.lang.RuntimeException: java.lang.ClassCastException: java.lang.L
ong cannot be cast to java.lang.Integer
2014-06-11 17:22:26,525 ERROR org.apache.pig.tools.pigstats.PigStatsUtil: 1
map reduce job(s) failed!
2014-06-11 17:22:26,573 ERROR org.apache.pig.tools.grunt.Grunt: ERROR 1066:
Unable to open iterator for alias data4. Backend error : java.lang.RuntimeEx
ception: java.lang.ClassCastException: java.lang.Long cannot be cast to java
.lang.Integer
我检查了成本域的数据,每个值都在int范围内,但是如果我更改
作为cost:int
至
作为cost:long
,错误消失
我只是不明白这里涉及的是长型
谢谢
1条答案
按热度按时间7hiiyaii1#
成本域的值是否在int范围内并不重要。如果它是原始的
int
至long
. 但是在pig中,在模式中定义一个字段cost:int
将其定义为对象java.lang.integer,并且不能转换为java.lang.longe、 g以下代码甚至不能用java编译:
这会导致classcastexception: