You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pig.apache.org by Alan Gates <ga...@yahoo-inc.com> on 2010/04/16 00:51:51 UTC

Re: TypeCheckingVisitor and casting to less precise numeric types

You are correct that all of these casts can be done.  We omitted them  
explicitly because of what you said that we did not want to loose  
precision.  We should be able to downcast when users ask explicitly  
for it, but we don't want to do this implicitly.

Alan.

On Mar 24, 2010, at 2:47 PM, Anil Chawla wrote:

>
>
> Hi,
> I know that Pig has logic for casting inputs to the expected data  
> types
> when invoking a UDF and I understand that this logic resides in the
> TypeCheckingVisitor class. I am curious to know why certain casts  
> have been
> omitted from the "castLookup" map. Specifically, I do not see any  
> entries
> for casting a more precise numeric type (e.g. Double) to a less  
> precise
> numeric type (e.g. Integer). Any reason why all down conversions of  
> numeric
> types have been omitted? Is it because we do not want to perform any
> automatic casts that lead to a loss of precision (loss of data)?
>
> In my situation, we are trying to abstract all numeric data types  
> into a
> single "number" type. If a UDF takes a numeric parameter, we want  
> Pig to
> invoke that UDF with any numeric argument, regardless of whether the
> argument must be upconverted or downconverted. We are OK with the  
> loss of
> precision in that circumstance. As a result, we added the following  
> to the
> "castLookup" map:
>
> castLookup.put(DataType.LONG, DataType.INTEGER);
> castLookup.put(DataType.FLOAT, DataType.LONG);
> castLookup.put(DataType.FLOAT, DataType.INTEGER);
> castLookup.put(DataType.DOUBLE, DataType.FLOAT);
> castLookup.put(DataType.DOUBLE, DataType.LONG);
> castLookup.put(DataType.DOUBLE, DataType.INTEGER);
>
> All of these casts seem to work fine our tests. Other than loss of
> precision, is there any reason why adding these casts might be a bad  
> idea?
>
> Thanks,
> -Anil