[
https://issues.apache.org/jira/browse/PIG-2153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060251#comment-13060251
]
Ken Goodhope commented on PIG-2153:
-----------------------------------
I am the first to admit this is ugly, and if someone has a better idea I would
be thrilled. I am currently running unit tests with this possible fix.
if(columns.size() == 1 && ((!overloaded && inpValue.getType(0) ==
DataType.TUPLE) || (overloaded && inpValue.getType(0) == DataType.BAG))) {
...
My current thinking is the reason the previous fix broke so many unit tests is
single element tuples containing a databag are acceptable if overloaded is set.
I will post the results of the tests when complete.
This might fix the issue in ElephantBird, but I haven't had time to investigate
that.
> POProject throws an error with tuples containing a single non-tuple field
> -------------------------------------------------------------------------
>
> Key: PIG-2153
> URL: https://issues.apache.org/jira/browse/PIG-2153
> Project: Pig
> Issue Type: Bug
> Affects Versions: 0.8.1
> Reporter: Ken Goodhope
>
> When POProject.getNext(tuple) processes a tuple with one field, the field is
> pulled out. If that field is not a tuple, a cast exception is thrown. This
> is happening in the folliwing block of code at line 401.
> if(columns.size() == 1) {
> try{
> ret = inpValue.get(columns.get(0));
> ...
> res.result = (Tuple)ret;
> I am seeing this error in a unit test that is loading an array of floats.
> The LoadFunc is converting the array to bag, and wrapping the bag in a tuple.
>
> ({(3.3),(1.2),(5.6)})
> This results on POProject attempting to cast the bag to a tuple. Looking at
> the code, it appears that if I wrapped the previous tuple in another tuple,
> then it would work.
> (({(3.3),(1.2),(5.6)}))
> In this case it would work because POProject would extract the first inner
> tuple and return it. But this would require the LoadFunc to check for tuples
> with a single non-tuple field and only wrap those.
> This could be fixed by first checking that the tuple does actually wrap
> another tuple.
> if(columns.size() == 1 && inpValue.getType(0) == DataType.TUPLE)
> {...
> I don't know the original intent of this code well enough to say this is the
> appropriate fix or not. Hoping someone with more Pig experience can help
> here. Right now this is preventing the unit tests in AvroStorage from
> working. I can change the unit test, but I think in this case the unit test
> is catching a real bug.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira