@@ -592,31 +592,36 @@ case class Corr(
592592 }
593593
594594 override def update (buffer : MutableRow , input : InternalRow ): Unit = {
595- val x = left.eval(input).asInstanceOf [Double ]
596- val y = right.eval(input).asInstanceOf [Double ]
597-
598- var xAvg = buffer.getDouble(mutableAggBufferOffset)
599- var yAvg = buffer.getDouble(mutableAggBufferOffsetPlus1)
600- var Ck = buffer.getDouble(mutableAggBufferOffsetPlus2)
601- var MkX = buffer.getDouble(mutableAggBufferOffsetPlus3)
602- var MkY = buffer.getDouble(mutableAggBufferOffsetPlus4)
603- var count = buffer.getLong(mutableAggBufferOffsetPlus5)
604-
605- val deltaX = x - xAvg
606- val deltaY = y - yAvg
607- count += 1
608- xAvg += deltaX / count
609- yAvg += deltaY / count
610- Ck += deltaX * (y - yAvg)
611- MkX += deltaX * (x - xAvg)
612- MkY += deltaY * (y - yAvg)
613-
614- buffer.setDouble(mutableAggBufferOffset, xAvg)
615- buffer.setDouble(mutableAggBufferOffsetPlus1, yAvg)
616- buffer.setDouble(mutableAggBufferOffsetPlus2, Ck )
617- buffer.setDouble(mutableAggBufferOffsetPlus3, MkX )
618- buffer.setDouble(mutableAggBufferOffsetPlus4, MkY )
619- buffer.setLong(mutableAggBufferOffsetPlus5, count)
595+ val leftEval = left.eval(input)
596+ val rightEval = right.eval(input)
597+
598+ if (leftEval != null && rightEval != null ) {
599+ val x = leftEval.asInstanceOf [Double ]
600+ val y = rightEval.asInstanceOf [Double ]
601+
602+ var xAvg = buffer.getDouble(mutableAggBufferOffset)
603+ var yAvg = buffer.getDouble(mutableAggBufferOffsetPlus1)
604+ var Ck = buffer.getDouble(mutableAggBufferOffsetPlus2)
605+ var MkX = buffer.getDouble(mutableAggBufferOffsetPlus3)
606+ var MkY = buffer.getDouble(mutableAggBufferOffsetPlus4)
607+ var count = buffer.getLong(mutableAggBufferOffsetPlus5)
608+
609+ val deltaX = x - xAvg
610+ val deltaY = y - yAvg
611+ count += 1
612+ xAvg += deltaX / count
613+ yAvg += deltaY / count
614+ Ck += deltaX * (y - yAvg)
615+ MkX += deltaX * (x - xAvg)
616+ MkY += deltaY * (y - yAvg)
617+
618+ buffer.setDouble(mutableAggBufferOffset, xAvg)
619+ buffer.setDouble(mutableAggBufferOffsetPlus1, yAvg)
620+ buffer.setDouble(mutableAggBufferOffsetPlus2, Ck )
621+ buffer.setDouble(mutableAggBufferOffsetPlus3, MkX )
622+ buffer.setDouble(mutableAggBufferOffsetPlus4, MkY )
623+ buffer.setLong(mutableAggBufferOffsetPlus5, count)
624+ }
620625 }
621626
622627 // Merge counters from other partitions. Formula can be found at:
0 commit comments