Apache Hadoop pig SPLIT 不工作。给出错误 1200

Apache Hadoop pig SPLIT not working. Giving Error 1200

袋子结构:

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 的新手。了解一些基础知识。请帮忙。

我认为您使用的 SPLIT 运算符有误。 这是来自文档: SPLIT 别名 INTO 别名 IF 表达式,别名 IF 表达式 [ 别名 IF 表达式 …] [ 别名 OTHERWISE];

所以不要在开始时使用这部分 "Bag ="。

请找到以下问题的解决方案以及有关 SPLIT 运算符的基本解释:

  1. SPLIT 运算符用于将关系分解为两个新关系。所以你需要照顾这两个条件,比如 IF 和 ELSE: 例如: IF(Something matches) then make Relation1, IF(NOT(something 匹配)然后建立另一个关系。 (您在 Pig 中没有 else 关键字)。
  2. SPLIT 操作是一个独立的操作,这意味着您不能将 SPLIT 操作存储在一个关系中:

示例: bag = split emp into mngr if job == 'MANAGER'; // 这是错误的。

不能用关系表示 SPLIT 操作。 它将在 GRUNT shell 或脚本上独立执行,如下所示:

*SPLIT emp INTO managers 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)