猪查询给出错误(位置参数分组)

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 为您处理。

以上是关于猪查询给出错误(位置参数分组)的主要内容,如果未能解决你的问题,请参考以下文章

线程中的类型错误。函数接受 x 位置参数,但给出了 y

函数中返回参数的数据位置必须是“内存”,但没有给出

TypeError:函数中参数的数据位置必须是“内存”,但没有给出

缺少1个必需的位置参数错误Python 3.6.2

在 Raku 的内部循环中使用循环的位置参数

cv2.rectangle:TypeError:由名称('厚度')和位置(4)给出的参数