2

EqualsIgnoreCase 函数 - 异常:org.apache.pig.backend.executionengine.ExecException

输入 :

 a.csv
 -------
  a
  A
 (blank/empty line)
  b
  B
  c
  C

目的:选择记录是'a','A','b'和'B'。

方法1:

    A = LOAD 'a.csv' using PigStorage(',') AS (value:chararray);
    B = FILTER A BY LOWER(value) IN ('a','b');
    DUMP B;

    Output :
     (a)
     (A)
     (b)
     (B)

方法2:

    C = FILTER A BY EqualsIgnoreCase(value, 'a') or  EqualsIgnoreCase(value, 'b');

    Output :
     2015-04-27 23:48:21,958 [Thread-30] WARN   org.apache.hadoop.mapred.LocalJobRunner - job_local_0014
        org.apache.pig.backend.executionengine.ExecException
        at org.apache.pig.builtin.EqualsIgnoreCase.exec(EqualsIgnoreCase.java:50)

试图理解为什么会抛出这个异常。我知道这是因为空白记录。

尝试检查值不为空或空,仍然是同样的错误。

  D = FILTER A BY (value IS NOT NULL) OR (TRIM(value) != '') AND (EqualsIgnoreCase(value, 'a') or  EqualsIgnoreCase(value, 'b'));

非常感谢任何有关使用方法 2实现我们目标的输入/想法。

4

1 回答 1

1

是的,你是对的,字符串函数EqualsIgnoreCase并且TRIM无法处理输入中的空白字符串。
要解决这个问题,你在上一个 stmt 中所做的一切都是正确的,只需删除 Trim它将起作用的功能。

C = FILTER A BY (value is not null) and (EqualsIgnoreCase(value, 'a') or  EqualsIgnoreCase(value, 'b'));

Isnot null condition将处理空(null、空格和制表符)字符,因此TRIM不需要函数。

于 2015-04-29T01:15:59.167 回答