summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author王宽 <[email protected]>2024-08-01 07:43:00 +0000
committer王宽 <[email protected]>2024-08-01 07:43:00 +0000
commit0b3bc65eb23f3b09b43dd61083631766a0e4d095 (patch)
treeff2ef8eebc097b750c32d518e2e2250960629699
parent708137a41c1806b4bc6925fc71b0a2892862d9ea (diff)
parent906a4a1bfe7d2dee5ed7144d20f05ba55546b02c (diff)
Merge branch 'feature/aggregate' into 'develop'
[fix][core]修复mean函数必须配置parameters的问题 See merge request galaxy/platform/groot-stream!84
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java3
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/udaf/Mean.java2
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/aggregate/MeanTest.java22
3 files changed, 23 insertions, 4 deletions
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java
index a8171b3..bdb41e0 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java
@@ -32,9 +32,6 @@ public class UnixTimestampConverter implements ScalarFunction {
if(udfContext.getLookup_fields().size() != 1){
throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, "The function output fields only support 1 value");
}
- if(udfContext.getParameters() == null){
- throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, "The function must contain parameters");
- }
if(!udfContext.getParameters().containsKey("precision")){
throw new GrootStreamRuntimeException(CommonErrorCode.ILLEGAL_ARGUMENT, "parameters must containkey precision");
}
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/udaf/Mean.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/udaf/Mean.java
index 380f598..88e4be6 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/udaf/Mean.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/udaf/Mean.java
@@ -29,7 +29,7 @@ public class Mean implements AggregateFunction {
else {
outputField = lookupField;
}
- if(!udfContext.getParameters().isEmpty()) {
+ if(udfContext.getParameters()!= null && !udfContext.getParameters().isEmpty()) {
precision = Integer.parseInt(udfContext.getParameters().getOrDefault("precision", "-1").toString());
if (precision > 0) {
StringBuilder pattern = new StringBuilder("#.");
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/aggregate/MeanTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/aggregate/MeanTest.java
index 48c4e0f..807b7db 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/aggregate/MeanTest.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/aggregate/MeanTest.java
@@ -41,6 +41,7 @@ public class MeanTest {
Integer[] intArr2 = new Integer[]{1, 6, 3};
excute(intArr1, 0);
excute2(intArr2, 2);
+ excute3(intArr1);
}
private static void excute(Number[] arr,int precision) throws ParseException {
@@ -93,5 +94,26 @@ public class MeanTest {
assertEquals(NumberFormat.getInstance().parse((result.getMetricsFields().get("field_mean").toString())),NumberFormat.getInstance().parse("3.33"));
}
+ private static void excute3(Number[] arr) throws ParseException {
+ UDFContext udfContext = new UDFContext();
+ udfContext.setLookup_fields(List.of("field"));
+ udfContext.setOutput_fields(Collections.singletonList("field_mean"));
+ Mean mean = new Mean();
+ Map<String, Object> metricsFields = new HashMap<>();
+ Accumulator accumulator = new Accumulator();
+ accumulator.setMetricsFields(metricsFields);
+ Accumulator agg = mean.open(udfContext,accumulator);
+
+ for (Number o : arr) {
+ Event event = new Event();
+ Map<String, Object> extractedFields = new HashMap<>();
+ extractedFields.put("field", o);
+ event.setExtractedFields(extractedFields);
+ agg = mean.add(event, agg);
+
+ }
+ Accumulator result = mean.getResult(agg);
+ assertEquals(NumberFormat.getInstance().parse((result.getMetricsFields().get("field_mean").toString())),NumberFormat.getInstance().parse("2.5"));
+ }
} \ No newline at end of file