0

袋子结构:

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

4

2 回答 2

1

我认为您错误地使用了 SPLIT 运算符。这来自文档:SPLIT alias INTO alias IF expression, alias IF expression [, alias IF expression ...] [, alias OTHERWISE];

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

于 2015-05-25T13:15:40.897 回答
1

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

  1. SPLIT 运算符用于将一个关系分解为两个新关系。所以你需要照顾好这两个条件,比如 IF 和 ELSE: 例如: IF(Something matches) then make Relation1, IF(NOT(something matches) then make another relationship.(你在 Pig 中没有 else 关键字) .
  2. 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)
于 2015-05-26T11:17:56.953 回答