我遇到了以下问题:
首先,我的数据是这样一个字符串:小数,小数
例子: 1.345, 3.456
我用下面的Pig脚本把这个专栏,比如qq,分为两个专栏:
result = FOREACH old_table GENERATE FLATTEN(STRSPLIT(QQ, ',')) as (COL1: double, COL2: double);
然后,我想按第一个字段排序,然后按第二个字段排序。
result_ordered = ORDER result BY COL1, COL2;
然而,我得到了如下结果:
> 59.619198977071434 -151.4586740547339
> 60.52611316847121 -150.8005347076273
> 64.8310014577408 -147.84786488835852
> 7.059652849999997 125.59985130999996
这意味着我的数据仍然是按字符串排序的,而不是按双精度排序的。有没有人遇到过这个问题,知道如何解决?提前谢谢!
2条答案
按热度按时间91zkwejq1#
我不知道为什么strsplit返回一个chararray,尽管你明确地说它们是双精度的。但如果你看看http://pig.apache.org/docs/r0.10.0/basic.html#arithmetic,请注意,chararray不能乘以1.0,但bytearray可以。因此,您可以执行以下操作:
这给了我正确的输出:
dwbf0jvd2#
而不是指定
FLATTEN
对于具有两个双精度的模式,请尝试使用(chararray)
. 可能是Pig只使用:chararray
用于应用模式检查的语法,但在执行期间需要显式转换来转换类型。