Skip to content

Commit 8bd2196

Browse files
committed
Address review feedback: return infinity on standard deviation overflow instead of throwing exception
1 parent 40c6b50 commit 8bd2196

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

  • sdks/java/extensions/sql/src

sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFn.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public T extractOutput(VarianceAccumulator accumulator) {
155155
}
156156
double sqrtVal = Math.sqrt(doubleVal);
157157
if (Double.isInfinite(sqrtVal)) {
158-
throw new ArithmeticException("Standard deviation overflow: result is infinity");
158+
return decimalConverter.apply(result.sqrt(MATH_CTX));
159159
}
160160
result = BigDecimal.valueOf(sqrtVal);
161161
}

sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/impl/transform/agg/VarianceFnTest.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,28 @@ public static Iterable<Object[]> varianceFns() {
6262
VarianceFn.newSampleStddev(Schema.TypeName.INT32),
6363
newVarianceAccumulator(new BigDecimal(36), new BigDecimal(5), ZERO),
6464
3
65+
},
66+
{
67+
VarianceFn.newPopulationStddev(Schema.TypeName.DOUBLE),
68+
newVarianceAccumulator(new BigDecimal("1e700"), BigDecimal.ONE, ZERO),
69+
Double.POSITIVE_INFINITY
70+
},
71+
{
72+
VarianceFn.newPopulationStddev(Schema.TypeName.FLOAT),
73+
newVarianceAccumulator(new BigDecimal("1e700"), BigDecimal.ONE, ZERO),
74+
Float.POSITIVE_INFINITY
6575
}
6676
});
6777
}
6878

6979
private VarianceFn varianceFn;
7080
private VarianceAccumulator testAccumulatorInput;
71-
private int expectedExtractedResult;
81+
private Object expectedExtractedResult;
7282

7383
public VarianceFnTest(
7484
VarianceFn varianceFn,
7585
VarianceAccumulator testAccumulatorInput,
76-
int expectedExtractedResult) {
86+
Object expectedExtractedResult) {
7787

7888
this.varianceFn = varianceFn;
7989
this.testAccumulatorInput = testAccumulatorInput;

0 commit comments

Comments
 (0)