猪查询给出错误(位置参数分组)
Posted
技术标签:
【中文标题】猪查询给出错误(位置参数分组)【英文标题】:Pig query giving error (positional parameter group by) 【发布时间】:2017-04-08 17:28:47 【问题描述】:如果您能解释我做错了什么,将不胜感激。
脚本在大多数情况下都有效,但是当我使用 group by 并转储结果时,我收到错误提示 other_vertex_failure;
样本数据
1,苹果,5.5 2,橙色,2.5 2、橙色、4.5 3、猕猴桃、1.5 3、猕猴桃、3.5 4、香蕉、4.0 4、香蕉、6.0
A = LOAD '/user/pig/apple.csv' USING PigStorage(','); **--this works**
B = FOREACH A GENERATE $0 as ids:int, $1 as fruit:chararray,
$2 as quan:int; **--this works**
C = GROUP B BY ids; **--this works gives no error**
但是当我转储 C 时;它会引发错误。
在猪中使用带有位置参数的名称是个坏主意吗?
【问题讨论】:
【参考方案1】:您可以将alias
分配给LOAD
本身的字段。
由于您还没有这样做,因此这些字段默认键入bytearray
。当它尝试将bytearray
转换为int
时,它会抛出ClassCastException
。
A = LOAD '/user/pig/apple.csv' USING PigStorage(',') as (ids:int, fruit:chararray, quan:float);
C = GROUP A BY ids;
dump C;
(1,(1,Apple,5.5))
(2,(2,Orange,4.5),(2,Orange,2.5))
(3,(3,Kiwi,3.5),(3,Kiwi,1.5))
(4,(4,Banana,6.0),(4,Banana,4.0))
【讨论】:
感谢您的回答 franklinsijo。我将如何处理超过 200 列的数据,而我只对其中的 3 列感兴趣?在这种情况下,使用 $reference 是 group by 的唯一选项?谢谢。 我建议您只在foreach
中分配没有数据类型的名称,以仅选择您感兴趣的3 个字段。当您尝试将bytearray 转换为整数时,会出现异常。 Pig 根据您正在执行的操作隐式处理转换字段。
非常感谢,最后一个问题,如果我需要在 foreach 之后为它们分配数据类型,最好的方法是什么?
AFAIK 如果您尝试将 bytearray
转换为其他数据类型,您将遇到问题。要么在LOAD
上明确执行,要么根本不执行。让 Pig 为您处理。以上是关于猪查询给出错误(位置参数分组)的主要内容,如果未能解决你的问题,请参考以下文章