Apache Hadoop猪SPLIT无法正常工作。给错误1200

时间:2015-05-25 08:52:35

标签: hadoop split apache-pig latin

包的结构:

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

2 个答案:

答案 0 :(得分:1)

我认为您使用的是SPLIT操作符错误。 这是来自doc: SPLIT别名INTO别名IF表达式,别名IF表达式[,别名IF表达式...] [,别名OTHERWISE];

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

答案 1 :(得分:1)

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

  1. SPLIT运算符用于将关系分解为 两个新关系 。所以你需要处理这两个条件,比如IF和ELSE: 例如: IF(Something matches)然后创建Relation1,IF(NOT(某事) 匹配)然后建立另一种关系。 (Pig中没有else关键字。)
  2. SPLIT操作是一个独立的操作,这意味着您无法将SPLIT操作存储在以下关系中:
  3. 实施例: 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)