请在下面找到问题的解决方案以及有关 SPLIT 运算符的基本说明:
- SPLIT 运算符用于将一个关系分解为两个新关系。所以你需要照顾好这两个条件,比如 IF 和 ELSE:
例如: IF(Something matches) then make Relation1, IF(NOT(something matches) then make another relationship.(你在 Pig 中没有 else 关键字) .
- SPLIT 操作是一个独立的操作,这意味着您不能将 SPLIT 操作存储在关系中:
示例: Bag = split emp into mngr if job == 'MANAGER'; // 这是错误的。
您不能通过关系来表示 SPLIT 操作。它将在 GRUNT shell 或脚本上独立执行,如下所示:
*SPLIT emp INTO manager IF(job MATCHES ' .MANAGER . '),not_managers 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)