apache hadoop pig split不工作给出错误1200

fslejnso  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(425)

袋子结构:

emp = LOAD '...../emp.csv' using PigStorage(',') AS
      (ename:chararray,id:int,job:chararray,sal:double)

这个包里有员工的详细资料。我想根据工作划分数据。

Bag = split emp into mngr if job == 'MANAGER';

这不是工作和给予 Error 1200. 如果我再加上一个条件, for ex.- sal10k if sal<10000 ,那么它就开始工作了。但为什么不只一个 chararray ?
我是hadoopPig新手。基本知识不多。请帮忙。

ao218c7q

ao218c7q1#

请找出以下问题的解决方案,并提供有关拆分运算符的基本说明:
拆分运算符用于将一个关系拆分为两个新关系。因此,您需要同时考虑这两个条件,例如if和else:例如:if(something matches)然后建立关系1,if(not)(something matches)然后建立另一个关系在pig中没有else关键字)。
拆分操作是独立的操作,这意味着您不能将拆分操作存储在关系中:
示例:bag=split emp into mngr if job=='manager';//这是错误的。
不能用关系表示拆分操作。它将在grunt shell或脚本上独立执行,如下所示:

  • 将emp拆分为经理if(job matches.manager.),而不是经理if(not(job matches.manager.))*

以下是一个示例数据集和输出,供您参考:**
数据集

**

Ron,1331,MANAGER,7232332.34
John,4332,ASSOCIATE,45534.6
Michell,4112,MANAGER,8342423.43
Tamp,1353,ASSOCIATE,34324.67
Ramo,2144,MODULE LEAD,845433.32
Shina,1389,MANAGER,8345321.78
Chin,4323,MODULE LEAD,455465.42

脚本:

emp = LOAD 'stackfile.txt' USING PigStorage(',') AS (ename:chararray,id:int,job:chararray,sal:double);

SPLIT emp INTO managers IF(job MATCHES '.*MANAGER.*'),not_managers IF(NOT(job MATCHES '.*MANAGER.*'));

DUMP managers;

输出:

(Ron,1331,MANAGER,7232332.34)
(Michell,4112,MANAGER,8342423.43)
(Shina,1389,MANAGER,8345321.78)
aiqt4smr

aiqt4smr2#

我认为你用分裂运算符是错误的。来自doc:将别名拆分为alias if expression,alias if expression[,alias if expression…][,alias otherwise];
所以不要在一开始就使用这个部件“bag=”。

相关问题