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.
@@ -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[] last;
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 Double[].class;
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
- ArrayList<Double> percentiles = new ArrayList<Double>(targets.length);
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
- percentiles.add(values[size * targets[i] / 100]);
85
+ result.put(targets[i].toString(), values[size * targets[i] / 100]);
85
86
  }
86
87
 
87
- last = (Double[]) percentiles.toArray(new Double[]{});
88
+ last = result;
88
89
  return last;
89
90
  }
90
91
 
@@ -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
- // import java.util.Map;
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 Double[].class;
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.1"
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.9"
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"
@@ -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.lang.Double[],
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[] values' do
18
- expect(f.getValueType).to eql(java.lang.Double[].java_class)
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 leve()' do
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[0]).to eql(10.0)
29
- expect(r[1]).to eql(20.0)
30
- expect(r[2]).to eql(30.0)
31
- expect(r[3]).to eql(40.0)
32
- expect(r[4]).to eql(50.0)
33
- expect(r[5]).to eql(60.0)
34
- expect(r[6]).to eql(70.0)
35
- expect(r[7]).to eql(80.0)
36
- expect(r[8]).to eql(90.0)
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[0]).to eql(55.0)
47
- expect(r[1]).to eql(60.0)
48
- expect(r[2]).to eql(65.0)
49
- expect(r[3]).to eql(70.0)
50
- expect(r[4]).to eql(75.0)
51
- expect(r[5]).to eql(80.0)
52
- expect(r[6]).to eql(85.0)
53
- expect(r[7]).to eql(90.0)
54
- expect(r[8]).to eql(95.0)
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.lang.Double[],
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).to_a.shuffle.each do |i|
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.1
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-20 00:00:00.000000000 Z
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.9
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.9
26
+ version: 0.0.11
27
27
  none: false
28
28
  prerelease: false
29
29
  type: :runtime