EqualsIgnoreCase 函数 - 异常:org.apache.pig.backend.executionengine.ExecException
EqualsIgnoreCase function - Exception : org.apache.pig.backend.executionengine.ExecException
EqualsIgnoreCase 函数 - 异常:org.apache.pig.backend.executionengine.ExecException
输入:
a.csv
-------
a
A
(blank/empty line)
b
B
c
C
Objective : 到 select 的记录是 'a', 'A', 'b' 和 'B'.
方法一:
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)
方法二:
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 实现我们的 objective 的输入/想法。
是的,你是对的,字符串函数 EqualsIgnoreCase
和 TRIM
无法处理输入中的空白字符串。
要解决这个问题,您在上一个 stmt 中所做的一切都是正确的,只需删除 Trim
函数即可。
C = FILTER A BY (value is not null) and (EqualsIgnoreCase(value, 'a') or EqualsIgnoreCase(value, 'b'));
是 not null condition
会处理空(null、space 和制表符)字符,因此不需要 TRIM
函数。
EqualsIgnoreCase 函数 - 异常:org.apache.pig.backend.executionengine.ExecException
输入:
a.csv
-------
a
A
(blank/empty line)
b
B
c
C
Objective : 到 select 的记录是 'a', 'A', 'b' 和 'B'.
方法一:
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)
方法二:
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 实现我们的 objective 的输入/想法。
是的,你是对的,字符串函数 EqualsIgnoreCase
和 TRIM
无法处理输入中的空白字符串。
要解决这个问题,您在上一个 stmt 中所做的一切都是正确的,只需删除 Trim
函数即可。
C = FILTER A BY (value is not null) and (EqualsIgnoreCase(value, 'a') or EqualsIgnoreCase(value, 'b'));
是 not null condition
会处理空(null、space 和制表符)字符,因此不需要 TRIM
函数。