我有一个示例输入作为制表符分隔键,值对如下
B_1001@2012-06-15 96.73429163933419@0.5511284347710459
B_1001@2012-06-18 187.4348199976547@0.5544551559243536
B_1002@2012-09-26 745.4912066349087@0.8398570478932768
B_1002@2012-09-28 60.97117969729124@0.8500267379723409
我正在将此文件加载到猪中并执行以下操作
a = load '/home/HadoopUser/Desktop/a.txt' as (key:chararray, value:chararray);
describe a;
a: {key: chararray,value: chararray}
b = foreach a generate key, flatten(STRSPLIT(value,'@',2)) as (v1:double,v2:float);
describe b;
b: {key: chararray,v1: double,v2: float}
c = group b by key;
describe c;
c: {group: chararray,b: {key: chararray,v1: double,v2: float}}
这一直有效,但是当我在 b.v1 上使用 Arthematical 计算时,我得到 ClassCastException,因为 java.lang.String 无法转换为 java.lang.Double
但描述没有错误
d = foreach c generate group,SUM(b.v1);
describe d;
d: {group: chararray,double}
当我转储 d; 它给出了例外
我什至也尝试过类型转换'b'
b = foreach a generate key, (tuple (double,double))STRSPLIT(value,'@',2);
现在当我描述 b 时;它给出了一个错误,因为不能将带有模式元组的元组转换为带有模式元组的元组({double,double})
请帮助我知道为什么会这样,甚至描述显示正确的模式。