Ok, I think I got it: the assertion is not correct, I've applied the
following patch and it works now:
Index:
src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/LessThanExpr.java
===================================================================
---
src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/LessThanExpr.java
(révision 831242)
+++
src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/LessThanExpr.java
(copie de travail)
@@ -123,8 +123,8 @@
left.returnStatus = POStatus.STATUS_NULL;
return left;
}
- assert(left instanceof Comparable);
- assert(right instanceof Comparable);
+ assert(left.result instanceof Comparable);
+ assert(right.result instanceof Comparable);
if
(((Comparable)left.result).compareTo((Comparable)right.result) < 0) {
left.result = trueRef;
} else {
Vincent Barat a écrit :
If I disable the assertion checking, my code seem to run correctly (no
error).
Maybe this assertion is deprecated ?
Vincent Barat a écrit :
Hi,
I'm facing a strange assertion (using the current PIG trunk) when
trying to perform a simple filter using comparison operator:
pigServer.registerQuery("sessions = FILTER sessions BY end - start <
3600000L;");
This only occurs when running my code in local mode, not in map reduce
mode.
I've tried to reproduce it using simple scripts run in local mode that
also uses the same kind of comparison, but the assertion does not occur.
Do you have any idea to fix this?
Thanks a lot,
The stack trace is the following:
2009-10-30 10:22:05,813 | FATAL | main | Main | Uncaught
handler: thread main (1) exiting due to uncaught exception
java.lang.AssertionError
at
org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.LessThanExpr.doComparison(LessThanExpr.java:126)
at
org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.LessThanExpr.getNext(LessThanExpr.java:94)
at
org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POFilter.getNext(POFilter.java:148)
at
org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:231)
at
org.apache.pig.backend.local.executionengine.physicalLayer.counters.POCounter.getNext(POCounter.java:71)
at
org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:231)
at
org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POStore.getNext(POStore.java:117)
at
org.apache.pig.backend.local.executionengine.LocalPigLauncher.runPipeline(LocalPigLauncher.java:147)
at
org.apache.pig.backend.local.executionengine.LocalPigLauncher.launchPig(LocalPigLauncher.java:109)
at
org.apache.pig.backend.local.executionengine.LocalExecutionEngine.execute(LocalExecutionEngine.java:165)
at
org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:779)
at org.apache.pig.PigServer.store(PigServer.java:528)
at org.apache.pig.PigServer.store(PigServer.java:493)
at com.ubikod.ermin.analytics.stats.Stats.prepare(Stats.java:64)
at com.ubikod.ermin.analytics.stats.Stats.compute(Stats.java:110)
at com.ubikod.ermin.analytics.Analytics.main(Analytics.java:189)
The full PIG code run from JAVA is the following:
pigServer.registerQuery("start_sessions = LOAD 'startSession' USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage('meta:sid meta:infoid
meta:imei meta:timestamp') "
+ "AS (sid:chararray, infoid:chararray, imei:chararray,
start:long);");
pigServer.registerQuery("end_sessions = LOAD 'endSession' USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage('meta:sid meta:infoid
meta:imei meta:timestamp meta:locid') "
+ "AS (sid:chararray, infoid:chararray, imei:chararray,
end:long, locid:chararray);");
pigServer.registerQuery("global_sessions = JOIN start_sessions BY sid,
end_sessions BY sid;");
pigServer.registerQuery("sessions = FILTER sessions BY end - start <
3600000L;");