如何在 pig 的组函数中使用 bincode 运算符
how to use bincode operator in group function in pig
我需要对下面关于名字和姓氏的数据进行分组。
(fname,lname,id)
abc,xyz,I
abc,xyz,N
ppp,xxx,I
ppp,XXX,I
在 id 字段中,我只期望 2 个值,即 N 或 I,所以如果我得到 N 和 I 相同的 fname,lname 组合,那么我应该使用 id 作为 N,否则需要使用 id 字段的值,因为它是群里给出。
我期待以下结果:
abc,xyz,N
ppp,xxx,I
我试过下面的代码,它工作正常
in =load '/testing/name.txt' USING PigStorage(',') as (fname:chararray,lname:chararray,id:chararray);
grp = group in by (fname,lname);
z = foreach grp generate FLATTEN(group) AS (fname,lname),(COUNT(in.id) >1 ? ('N') :BagToTuple(in.id))as id;
但是现在我需要检查 id 字段的值而不是计数:
z = foreach grp generate FLATTEN(group) AS (fname,lname),((in.id == 'N' or in.id == 'I') ? ('N') :BagToTuple(in.id))as id;
然而它给出了以下错误:
(Name: Equal Type: null Uid: null)incompatible types in Equal Operator left hand side:bag :tuple(id:chararray) right hand side:chararray
然而它给出了以下错误:
Two inputs of BinCond must have compatible schemas. left hand side: #31:tuple(#32:chararray) right hand side: org.apache.pig.builtin.bagtotuple_3#35:tuple(id#36:int)
请指导
您正在将包含字符(即 N、I)的字段加载到 int 列中?更改 id 列类型为 chararray 的加载语句。
in =load '/testing/name.txt' USING PigStorage(',') as (fname:chararray,lname:chararray,id:chararray);
grp = group in by (fname,lname);
z = foreach grp generate FLATTEN(group) AS (fname,lname),(COUNT(in.id) > 1 && in.id matches 'N') ? ('N') : in.id;
我需要对下面关于名字和姓氏的数据进行分组。
(fname,lname,id)
abc,xyz,I
abc,xyz,N
ppp,xxx,I
ppp,XXX,I
在 id 字段中,我只期望 2 个值,即 N 或 I,所以如果我得到 N 和 I 相同的 fname,lname 组合,那么我应该使用 id 作为 N,否则需要使用 id 字段的值,因为它是群里给出。
我期待以下结果:
abc,xyz,N
ppp,xxx,I
我试过下面的代码,它工作正常
in =load '/testing/name.txt' USING PigStorage(',') as (fname:chararray,lname:chararray,id:chararray);
grp = group in by (fname,lname);
z = foreach grp generate FLATTEN(group) AS (fname,lname),(COUNT(in.id) >1 ? ('N') :BagToTuple(in.id))as id;
但是现在我需要检查 id 字段的值而不是计数:
z = foreach grp generate FLATTEN(group) AS (fname,lname),((in.id == 'N' or in.id == 'I') ? ('N') :BagToTuple(in.id))as id;
然而它给出了以下错误:
(Name: Equal Type: null Uid: null)incompatible types in Equal Operator left hand side:bag :tuple(id:chararray) right hand side:chararray
然而它给出了以下错误:
Two inputs of BinCond must have compatible schemas. left hand side: #31:tuple(#32:chararray) right hand side: org.apache.pig.builtin.bagtotuple_3#35:tuple(id#36:int)
请指导
您正在将包含字符(即 N、I)的字段加载到 int 列中?更改 id 列类型为 chararray 的加载语句。
in =load '/testing/name.txt' USING PigStorage(',') as (fname:chararray,lname:chararray,id:chararray);
grp = group in by (fname,lname);
z = foreach grp generate FLATTEN(group) AS (fname,lname),(COUNT(in.id) > 1 && in.id matches 'N') ? ('N') : in.id;