包的结构:
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
?
我是hadoop pig的新手。知道一些基础知识。请帮助。
答案 0 :(得分:1)
我认为您使用的是SPLIT操作符错误。 这是来自doc: SPLIT别名INTO别名IF表达式,别名IF表达式[,别名IF表达式...] [,别名OTHERWISE];
所以不要在开始时使用这个部分“Bag =”。
答案 1 :(得分:1)
请找到以下问题的解决方案以及有关SPLIT运算符的基本说明:
实施例: Bag =如果job =='MANAGER',则将emp拆分为mngr; //这是错的。
您无法通过关系表示SPLIT操作。 它将在GRUNT shell或Script上独立执行,如下所示:
* SPLIT emp INTO经理IF(工作比赛'。 MANAGER。'),not_managers IF(NOT(工作比赛'。 MANAGER。')); * < / p>
以下是一个示例数据集和输出供您参考: **
**
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
<强> SCRIPT:强>
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)