Re: [DISCUSS][Java] Provide an interface for numeric vectors

2019-08-20 Thread Fan Liya
As suggested by Micah, there are some problems with the common interface
for numeric types:
1. corner cases for transforming special floating point values, like NaN,
inf, etc.
2. loss of precision when transforming long to double.

Instead, we provide a common interface for float4 & float8 values.
The purpose is similar, to reduce unnecessary branch/swtich statements in
the code.
Please take a look https://issues.apache.org/jira/browse/ARROW-6247

Best,
Liya Fan

On Thu, Aug 15, 2019 at 1:41 PM Fan Liya  wrote:

> Hi Micah,
>
> Thanks for the good points.
> I agree with you that we should improve the efficiency of algorithms.
>
> This is related to another improvement: reduce the if/switch statements in
> the code.
>
> To account for the edge cases, can we remove the set methods, and leaving
> only the get method?
> This is because for some scenarios, we have vectors that can either be int
> vectors or float vectors.
>
> The common interface for float4 and float8 sounds good. Let's do it in
> another issue.
>
> Best,
> Liya FAn
>
> On Thu, Aug 15, 2019 at 12:49 PM Micah Kornfield 
> wrote:
>
>> Hi Liya Fan,
>> I'm not sure if this is a good idea.  First, floating point operations
>> have
>> more edge cases than integer arithmetic (e.g. dealing with NaNs).  Second,
>> and I apologize that I've been remiss in thinking this through on reviews,
>> but I think we should be thinking about how to make algorithms/operations
>> as efficient as possible.  In this regards putting everything behind an
>> interface prevents the JVM JIT from inlining them effectively.
>>
>> It might not be a bad idea to have a have a common interface for just the
>> Float4 and Float8 vectors, but I'd like to get other peoples thoughts on
>> this.
>>
>> Thanks,
>> Micah
>>
>> On Wed, Aug 14, 2019 at 7:26 PM Fan Liya  wrote:
>>
>> > Dear all,
>> >
>> >
>> >
>> > We want to provide an interface for all vectors with numeric types
>> (small
>> > int, float4, float8, etc). This interface will make it convenient for
>> many
>> > operations on a vector, like average, sum, variance, etc. With this
>> > interface, the client code will be greatly simplified, with many
>> > branches/switch removed.
>> >
>> >
>> >
>> > The design is similar to BaseIntVector (the interface for all integer
>> > vectors). We provide 3 methods for setting & getting numeric values:
>> >
>> >  setWithPossibleRounding
>> >
>> >  setSafeWithPossibleRounding
>> >
>> >  getValueAsDouble
>> >
>> >
>> >
>> > Please give some comments. Thanks a lot.
>> >
>> >
>> >
>> > Best,
>> >
>> > Liya Fan
>> >
>>
>


Re: [DISCUSS][Java] Provide an interface for numeric vectors

2019-08-14 Thread Fan Liya
Hi Micah,

Thanks for the good points.
I agree with you that we should improve the efficiency of algorithms.

This is related to another improvement: reduce the if/switch statements in
the code.

To account for the edge cases, can we remove the set methods, and leaving
only the get method?
This is because for some scenarios, we have vectors that can either be int
vectors or float vectors.

The common interface for float4 and float8 sounds good. Let's do it in
another issue.

Best,
Liya FAn

On Thu, Aug 15, 2019 at 12:49 PM Micah Kornfield 
wrote:

> Hi Liya Fan,
> I'm not sure if this is a good idea.  First, floating point operations have
> more edge cases than integer arithmetic (e.g. dealing with NaNs).  Second,
> and I apologize that I've been remiss in thinking this through on reviews,
> but I think we should be thinking about how to make algorithms/operations
> as efficient as possible.  In this regards putting everything behind an
> interface prevents the JVM JIT from inlining them effectively.
>
> It might not be a bad idea to have a have a common interface for just the
> Float4 and Float8 vectors, but I'd like to get other peoples thoughts on
> this.
>
> Thanks,
> Micah
>
> On Wed, Aug 14, 2019 at 7:26 PM Fan Liya  wrote:
>
> > Dear all,
> >
> >
> >
> > We want to provide an interface for all vectors with numeric types (small
> > int, float4, float8, etc). This interface will make it convenient for
> many
> > operations on a vector, like average, sum, variance, etc. With this
> > interface, the client code will be greatly simplified, with many
> > branches/switch removed.
> >
> >
> >
> > The design is similar to BaseIntVector (the interface for all integer
> > vectors). We provide 3 methods for setting & getting numeric values:
> >
> >  setWithPossibleRounding
> >
> >  setSafeWithPossibleRounding
> >
> >  getValueAsDouble
> >
> >
> >
> > Please give some comments. Thanks a lot.
> >
> >
> >
> > Best,
> >
> > Liya Fan
> >
>


Re: [DISCUSS][Java] Provide an interface for numeric vectors

2019-08-14 Thread Micah Kornfield
Hi Liya Fan,
I'm not sure if this is a good idea.  First, floating point operations have
more edge cases than integer arithmetic (e.g. dealing with NaNs).  Second,
and I apologize that I've been remiss in thinking this through on reviews,
but I think we should be thinking about how to make algorithms/operations
as efficient as possible.  In this regards putting everything behind an
interface prevents the JVM JIT from inlining them effectively.

It might not be a bad idea to have a have a common interface for just the
Float4 and Float8 vectors, but I'd like to get other peoples thoughts on
this.

Thanks,
Micah

On Wed, Aug 14, 2019 at 7:26 PM Fan Liya  wrote:

> Dear all,
>
>
>
> We want to provide an interface for all vectors with numeric types (small
> int, float4, float8, etc). This interface will make it convenient for many
> operations on a vector, like average, sum, variance, etc. With this
> interface, the client code will be greatly simplified, with many
> branches/switch removed.
>
>
>
> The design is similar to BaseIntVector (the interface for all integer
> vectors). We provide 3 methods for setting & getting numeric values:
>
>  setWithPossibleRounding
>
>  setSafeWithPossibleRounding
>
>  getValueAsDouble
>
>
>
> Please give some comments. Thanks a lot.
>
>
>
> Best,
>
> Liya Fan
>


[jira] [Created] (ARROW-6245) [DISCUSS][Java] Provide an interface for numeric vectors

2019-08-14 Thread Liya Fan (JIRA)
Liya Fan created ARROW-6245:
---

 Summary: [DISCUSS][Java] Provide an interface for numeric vectors
 Key: ARROW-6245
 URL: https://issues.apache.org/jira/browse/ARROW-6245
 Project: Apache Arrow
  Issue Type: Improvement
  Components: Java
Reporter: Liya Fan
Assignee: Liya Fan


We want to provide an interface for all vectors with numeric types (small int, 
float4, float8, etc). This interface will make it convenient for many 
operations on a vector, like average, sum, variance, etc. With this interface, 
the client code will be greatly simplified, with many branches/switch removed.

 

The design is similar to BaseIntVector (the interface for all integer vectors). 
We provide 3 methods for setting & getting numeric values:

 setWithPossibleRounding

 setSafeWithPossibleRounding

 getValueAsDouble



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)


[DISCUSS][Java] Provide an interface for numeric vectors

2019-08-14 Thread Fan Liya
Dear all,



We want to provide an interface for all vectors with numeric types (small
int, float4, float8, etc). This interface will make it convenient for many
operations on a vector, like average, sum, variance, etc. With this
interface, the client code will be greatly simplified, with many
branches/switch removed.



The design is similar to BaseIntVector (the interface for all integer
vectors). We provide 3 methods for setting & getting numeric values:

 setWithPossibleRounding

 setSafeWithPossibleRounding

 getValueAsDouble



Please give some comments. Thanks a lot.



Best,

Liya Fan