[jira] [Commented] (PIG-3609) ClassCastException when calling compareTo method on AvroBagWrapper 

2013-12-23 Thread Richard Ding (JIRA)

[ 
https://issues.apache.org/jira/browse/PIG-3609?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13856041#comment-13856041
 ] 

Richard Ding commented on PIG-3609:
---

[~cheolsoo], checking size is an optimization, this is also what 
DefaultAbstractBag implements. 

+1 on the patch.

> ClassCastException when calling compareTo method on AvroBagWrapper 
> ---
>
> Key: PIG-3609
> URL: https://issues.apache.org/jira/browse/PIG-3609
> Project: Pig
>  Issue Type: Bug
>  Components: impl
>Affects Versions: 0.12.0
>Reporter: Richard Ding
>Assignee: Richard Ding
>Priority: Minor
> Attachments: PIG-3609.patch, PIG-3609_2.patch, PIG-3609_3.patch
>
>
> One got the following exception when calling compareTo method on 
> AvroBagWrapper with an AvroBagWrapper object:
> {code}
> java.lang.ClassCastException: org.apache.pig.impl.util.avro.AvroBagWrapper 
> incompatible with java.util.Collection
> at org.apache.avro.generic.GenericData.compare(GenericData.java:786)
> at org.apache.avro.generic.GenericData.compare(GenericData.java:760)
> at 
> org.apache.pig.impl.util.avro.AvroBagWrapper.compareTo(AvroBagWrapper.java:78)
> {code}
> Looking at the code, it compares objects with different types:
> {code}
> return GenericData.get().compare(theArray, o, theArray.getSchema());
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)


[jira] [Commented] (PIG-3609) ClassCastException when calling compareTo method on AvroBagWrapper 

2013-12-18 Thread Cheolsoo Park (JIRA)

[ 
https://issues.apache.org/jira/browse/PIG-3609?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13852224#comment-13852224
 ] 

Cheolsoo Park commented on PIG-3609:


[~rding], I don't think the following is correct-
{code}
+  AvroBagWrapper bOther = (AvroBagWrapper) o;
+  if (this.size() != bOther.size()) {
+  if (this.size() > bOther.size()) return 1;
+  else return -1;
+  }
+  return GenericData.get().compare(theArray, bOther.theArray, 
theArray.getSchema());
{code}
When comparing arrays, we should compare entries one by one before comparing 
the size of arrays, shouldn't we? At least, that's how GenericData#compare() 
works for arrays-
{code}
case ARRAY:
  Collection a1 = (Collection)o1;
  Collection a2 = (Collection)o2;
  Iterator e1 = a1.iterator();
  Iterator e2 = a2.iterator();
  Schema elementType = s.getElementType();
  while(e1.hasNext() && e2.hasNext()) {
int compare = compare(e1.next(), e2.next(), elementType, equals);
if (compare != 0) return compare;
  }
  return e1.hasNext() ? 1 : (e2.hasNext() ? -1 : 0);
{code}
I think we should just call GenericData#compare() w/o comparing the size.

In addition, I found your test case a bit confusing. Since getExpect() returns 
a set which doesn't guarantee any ordering, it's not clear how arrays are 
mapped to bw0, bw1, and bw2. That makes it hard to reason about the assertions.

> ClassCastException when calling compareTo method on AvroBagWrapper 
> ---
>
> Key: PIG-3609
> URL: https://issues.apache.org/jira/browse/PIG-3609
> Project: Pig
>  Issue Type: Bug
>  Components: impl
>Affects Versions: 0.12.0
>Reporter: Richard Ding
>Assignee: Richard Ding
>Priority: Minor
> Attachments: PIG-3609.patch, PIG-3609_2.patch
>
>
> One got the following exception when calling compareTo method on 
> AvroBagWrapper with an AvroBagWrapper object:
> {code}
> java.lang.ClassCastException: org.apache.pig.impl.util.avro.AvroBagWrapper 
> incompatible with java.util.Collection
> at org.apache.avro.generic.GenericData.compare(GenericData.java:786)
> at org.apache.avro.generic.GenericData.compare(GenericData.java:760)
> at 
> org.apache.pig.impl.util.avro.AvroBagWrapper.compareTo(AvroBagWrapper.java:78)
> {code}
> Looking at the code, it compares objects with different types:
> {code}
> return GenericData.get().compare(theArray, o, theArray.getSchema());
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)