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 运算符的基本解释:
- SPLIT 运算符用于将关系分解为两个新关系。所以你需要照顾这两个条件,比如 IF 和 ELSE:
例如: IF(Something matches) then make Relation1, IF(NOT(something
匹配)然后建立另一个关系。 (您在 Pig 中没有 else 关键字)。
- 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)
袋子结构:
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 运算符的基本解释:
- SPLIT 运算符用于将关系分解为两个新关系。所以你需要照顾这两个条件,比如 IF 和 ELSE: 例如: IF(Something matches) then make Relation1, IF(NOT(something 匹配)然后建立另一个关系。 (您在 Pig 中没有 else 关键字)。
- 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)