norikra-udf-percentile 0.0.1-java → 0.0.2-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/jar/norikra-udf-percentile.jar +0 -0
- data/java/is/tagomor/norikra/udf/Percentiles.class +0 -0
- data/java/is/tagomor/norikra/udf/Percentiles.java +7 -6
- data/java/is/tagomor/norikra/udf/PercentilesFactory.class +0 -0
- data/java/is/tagomor/norikra/udf/PercentilesFactory.java +2 -2
- data/norikra-udf-percentile.gemspec +2 -2
- data/spec/percentiles_spec.rb +28 -25
- metadata +4 -4
Binary file
|
Binary file
|
@@ -3,6 +3,7 @@ package is.tagomor.norikra.udf;
|
|
3
3
|
import com.espertech.esper.epl.agg.aggregator.AggregationMethod;
|
4
4
|
|
5
5
|
import java.util.ArrayList;
|
6
|
+
import java.util.HashMap;
|
6
7
|
import java.util.Random;
|
7
8
|
|
8
9
|
public class Percentiles implements AggregationMethod {
|
@@ -11,7 +12,7 @@ public class Percentiles implements AggregationMethod {
|
|
11
12
|
private ArrayList<Double> valueList;
|
12
13
|
private Integer[] targets;
|
13
14
|
|
14
|
-
private Double
|
15
|
+
private HashMap<String,Double> last;
|
15
16
|
|
16
17
|
public Percentiles() {
|
17
18
|
valueList = null;
|
@@ -23,7 +24,7 @@ public class Percentiles implements AggregationMethod {
|
|
23
24
|
}
|
24
25
|
|
25
26
|
public Class getValueType() {
|
26
|
-
return
|
27
|
+
return HashMap.class;
|
27
28
|
}
|
28
29
|
|
29
30
|
public Double convertValue(Object v) {
|
@@ -70,9 +71,9 @@ public class Percentiles implements AggregationMethod {
|
|
70
71
|
if (valueList.size() == 0)
|
71
72
|
return last;
|
72
73
|
|
73
|
-
|
74
|
-
Double[] values = (Double[]) valueList.toArray(new Double[]{});
|
74
|
+
HashMap<String,Double> result = new HashMap<String,Double>(); // initial capacity 16, load factor 0.75
|
75
75
|
|
76
|
+
Double[] values = (Double[]) valueList.toArray(new Double[]{});
|
76
77
|
// for thread safety
|
77
78
|
if (values.length == 0)
|
78
79
|
return last;
|
@@ -81,10 +82,10 @@ public class Percentiles implements AggregationMethod {
|
|
81
82
|
int size = values.length;
|
82
83
|
|
83
84
|
for (int i = 0 ; i < targets.length ; i += 1) {
|
84
|
-
|
85
|
+
result.put(targets[i].toString(), values[size * targets[i] / 100]);
|
85
86
|
}
|
86
87
|
|
87
|
-
last =
|
88
|
+
last = result;
|
88
89
|
return last;
|
89
90
|
}
|
90
91
|
|
Binary file
|
@@ -4,7 +4,7 @@ import com.espertech.esper.client.hook.AggregationFunctionFactory;
|
|
4
4
|
import com.espertech.esper.epl.agg.service.AggregationValidationContext;
|
5
5
|
import com.espertech.esper.epl.agg.aggregator.AggregationMethod;
|
6
6
|
|
7
|
-
|
7
|
+
import java.util.HashMap;
|
8
8
|
|
9
9
|
public class PercentilesFactory implements AggregationFunctionFactory {
|
10
10
|
public void setFunctionName(String functionName) {
|
@@ -40,7 +40,7 @@ public class PercentilesFactory implements AggregationFunctionFactory {
|
|
40
40
|
of any values produced by the aggregation function:
|
41
41
|
*/
|
42
42
|
public Class getValueType() {
|
43
|
-
return
|
43
|
+
return HashMap.class;
|
44
44
|
}
|
45
45
|
|
46
46
|
/*
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "norikra-udf-percentile"
|
5
|
-
spec.version = "0.0.
|
5
|
+
spec.version = "0.0.2"
|
6
6
|
spec.authors = ["TAGOMORI Satoshi"]
|
7
7
|
spec.email = ["tagomoris@gmail.com"]
|
8
8
|
spec.description = %q{This plugin adds functions named percentile/percentiles, which calculate percentile for specified fields}
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ["lib", "jar"]
|
18
18
|
|
19
|
-
spec.add_runtime_dependency "norikra", ">= 0.0.
|
19
|
+
spec.add_runtime_dependency "norikra", ">= 0.0.11"
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
data/spec/percentiles_spec.rb
CHANGED
@@ -7,33 +7,33 @@ require 'norikra/udf/percentile'
|
|
7
7
|
describe Norikra::UDF::Percentiles do
|
8
8
|
f = udf_function(
|
9
9
|
Norikra::UDF::Percentiles,
|
10
|
-
:valueType => java.
|
10
|
+
:valueType => java.util.HashMap,
|
11
11
|
:parameters => [
|
12
12
|
[java.lang.String, false],
|
13
13
|
[java.lang.Integer[], true, [10,20,30,40,50,60,70,80,90].to_java(:Integer)].to_java,
|
14
14
|
]
|
15
15
|
)
|
16
16
|
|
17
|
-
it 'returns Double
|
18
|
-
expect(f.getValueType).to eql(java.
|
17
|
+
it 'returns HashMap<Integer,Double> values' do
|
18
|
+
expect(f.getValueType).to eql(java.util.HashMap.java_class)
|
19
19
|
end
|
20
20
|
|
21
|
-
it 'returns 9 values as percentiles, and reflect for
|
21
|
+
it 'returns 9 values as percentiles, and reflect for leave()' do
|
22
22
|
(0...100).each do |i|
|
23
23
|
f._call(:enter, [i.to_s, [10,20,30,40,50,60,70,80,90].to_java(:Integer)].to_java)
|
24
24
|
end
|
25
25
|
|
26
26
|
r = f.getValue
|
27
27
|
expect(r.size).to eql(9)
|
28
|
-
expect(r[
|
29
|
-
expect(r[
|
30
|
-
expect(r[
|
31
|
-
expect(r[
|
32
|
-
expect(r[
|
33
|
-
expect(r[
|
34
|
-
expect(r[
|
35
|
-
expect(r[
|
36
|
-
expect(r[
|
28
|
+
expect(r["10"]).to eql(10.0)
|
29
|
+
expect(r["20"]).to eql(20.0)
|
30
|
+
expect(r["30"]).to eql(30.0)
|
31
|
+
expect(r["40"]).to eql(40.0)
|
32
|
+
expect(r["50"]).to eql(50.0)
|
33
|
+
expect(r["60"]).to eql(60.0)
|
34
|
+
expect(r["70"]).to eql(70.0)
|
35
|
+
expect(r["80"]).to eql(80.0)
|
36
|
+
expect(r["90"]).to eql(90.0)
|
37
37
|
|
38
38
|
(0...50).each do |i|
|
39
39
|
f._call(:leave, [i.to_s, [10,20,30,40,50,60,70,80,90].to_java(:Integer)].to_java)
|
@@ -43,27 +43,27 @@ describe Norikra::UDF::Percentiles do
|
|
43
43
|
|
44
44
|
r = f.getValue
|
45
45
|
expect(r.size).to eql(9)
|
46
|
-
expect(r[
|
47
|
-
expect(r[
|
48
|
-
expect(r[
|
49
|
-
expect(r[
|
50
|
-
expect(r[
|
51
|
-
expect(r[
|
52
|
-
expect(r[
|
53
|
-
expect(r[
|
54
|
-
expect(r[
|
46
|
+
expect(r["10"]).to eql(55.0)
|
47
|
+
expect(r["20"]).to eql(60.0)
|
48
|
+
expect(r["30"]).to eql(65.0)
|
49
|
+
expect(r["40"]).to eql(70.0)
|
50
|
+
expect(r["50"]).to eql(75.0)
|
51
|
+
expect(r["60"]).to eql(80.0)
|
52
|
+
expect(r["70"]).to eql(85.0)
|
53
|
+
expect(r["80"]).to eql(90.0)
|
54
|
+
expect(r["90"]).to eql(95.0)
|
55
55
|
end
|
56
56
|
|
57
57
|
f2 = udf_function(
|
58
58
|
Norikra::UDF::Percentiles,
|
59
|
-
:valueType => java.
|
59
|
+
:valueType => java.util.HashMap,
|
60
60
|
:parameters => [
|
61
61
|
[java.lang.Integer, false],
|
62
62
|
[java.lang.Integer[], true, [50,90,95,98,99].to_java(:Integer)].to_java,
|
63
63
|
]
|
64
64
|
)
|
65
65
|
it 'returns 5 values as percentiles, and returns same value after all values leaving' do
|
66
|
-
(0...2000).
|
66
|
+
(0...2000).each do |i|
|
67
67
|
f2._call(:enter, [i, [50,90,95,98,99].to_java(:Integer), 100].to_java)
|
68
68
|
end
|
69
69
|
|
@@ -77,6 +77,9 @@ describe Norikra::UDF::Percentiles do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
r2 = f2.getValue
|
80
|
-
expect(r2).to eql(r)
|
80
|
+
expect(r2.size).to eql(r.size)
|
81
|
+
r2.keys.each do |k|
|
82
|
+
expect(r2[k]).to eql(r[k])
|
83
|
+
end
|
81
84
|
end
|
82
85
|
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: norikra-udf-percentile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- TAGOMORI Satoshi
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: norikra
|
@@ -17,13 +17,13 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.0.
|
20
|
+
version: 0.0.11
|
21
21
|
none: false
|
22
22
|
requirement: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.
|
26
|
+
version: 0.0.11
|
27
27
|
none: false
|
28
28
|
prerelease: false
|
29
29
|
type: :runtime
|