Opened https://issues.apache.org/jira/browse/SPARK-12128

Thanks

P

On Thu, Dec 3, 2015 at 8:51 AM, Philip Dodds <philip.do...@gmail.com> wrote:

> I'll open up a JIRA for it,  it appears to work when you use a literal
> number but not when it is coming from the same dataframe
>
> Thanks!
>
> P
>
> On Thu, Dec 3, 2015 at 1:52 AM, Sahil Sareen <sareen...@gmail.com> wrote:
>
>> +1 looks like a bug
>>
>> I think referencing trades() twice in multiplication is broken,
>>
>> scala> trades.select(trades("quantity")*trades("quantity")).show
>>
>> +---------------------+
>> |(quantity * quantity)|
>> +---------------------+
>> |                 null|
>> |                 null|
>>
>> scala> sqlContext.sql("select price*price as PP from trades").show
>>
>> +----+
>> |  PP|
>> +----+
>> |null|
>> |null|
>>
>>
>> -Sahil
>>
>> On Thu, Dec 3, 2015 at 12:02 PM, Akhil Das <ak...@sigmoidanalytics.com>
>> wrote:
>>
>>> Not quiet sure whats happening, but its not an issue with multiplication
>>> i guess as the following query worked for me:
>>>
>>> trades.select(trades("price")*9.5).show
>>> +-------------+
>>> |(price * 9.5)|
>>> +-------------+
>>> |        199.5|
>>> |        228.0|
>>> |        190.0|
>>> |        199.5|
>>> |        190.0|
>>> |        256.5|
>>> |        218.5|
>>> |        275.5|
>>> |        218.5|
>>> ......
>>> ......
>>>
>>>
>>> Could it be with the precision? ccing dev list, may be you can open up a
>>> jira for this as it seems to be a bug.
>>>
>>> Thanks
>>> Best Regards
>>>
>>> On Mon, Nov 30, 2015 at 12:41 AM, Philip Dodds <philip.do...@gmail.com>
>>> wrote:
>>>
>>>> I hit a weird issue when I tried to multiply to decimals in a select
>>>> (either in scala or as SQL), and Im assuming I must be missing the point.
>>>>
>>>> The issue is fairly easy to recreate with something like the following:
>>>>
>>>>
>>>> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
>>>> import sqlContext.implicits._
>>>> import org.apache.spark.sql.types.Decimal
>>>>
>>>> case class Trade(quantity: Decimal,price: Decimal)
>>>>
>>>> val data = Seq.fill(100) {
>>>>   val price = Decimal(20+scala.util.Random.nextInt(10))
>>>>     val quantity = Decimal(20+scala.util.Random.nextInt(10))
>>>>
>>>>   Trade(quantity, price)
>>>> }
>>>>
>>>> val trades = sc.parallelize(data).toDF()
>>>> trades.registerTempTable("trades")
>>>>
>>>> trades.select(trades("price")*trades("quantity")).show
>>>>
>>>> sqlContext.sql("select
>>>> price/quantity,price*quantity,price+quantity,price-quantity from
>>>> trades").show
>>>>
>>>> The odd part is if you run it you will see that the addition/division
>>>> and subtraction works but the multiplication returns a null.
>>>>
>>>> Tested on 1.5.1/1.5.2 (Scala 2.10 and 2.11)
>>>>
>>>> ie.
>>>>
>>>> +------------------+
>>>>
>>>> |(price * quantity)|
>>>>
>>>> +------------------+
>>>>
>>>> |              null|
>>>>
>>>> |              null|
>>>>
>>>> |              null|
>>>>
>>>> |              null|
>>>>
>>>> |              null|
>>>>
>>>> +------------------+
>>>>
>>>>
>>>> +--------------------+----+--------------------+--------------------+
>>>>
>>>> |                 _c0| _c1|                 _c2|                 _c3|
>>>>
>>>> +--------------------+----+--------------------+--------------------+
>>>>
>>>> |0.952380952380952381|null|41.00000000000000...|-1.00000000000000...|
>>>>
>>>> |1.380952380952380952|null|50.00000000000000...|8.000000000000000000|
>>>>
>>>> |1.272727272727272727|null|50.00000000000000...|6.000000000000000000|
>>>>
>>>> |0.833333333333333333|null|44.00000000000000...|-4.00000000000000...|
>>>>
>>>> |1.000000000000000000|null|58.00000000000000...|               0E-18|
>>>>
>>>> +--------------------+----+--------------------+--------------------+
>>>>
>>>>
>>>> Just keen to know what I did wrong?
>>>>
>>>>
>>>> Cheers
>>>>
>>>> P
>>>>
>>>> --
>>>> Philip Dodds
>>>>
>>>>
>>>>
>>>
>>
>
>
> --
> Philip Dodds
>
> philip.do...@gmail.com
> @philipdodds
>
>


-- 
Philip Dodds

philip.do...@gmail.com
@philipdodds

Reply via email to