+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
>>
>>
>>
>

Reply via email to