This is an automated email from the ASF dual-hosted git repository.

zhangzp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-ml.git


The following commit(s) were added to refs/heads/master by this push:
     new f6b071f  [hotfix] Fix finding buckets error in Bucketizer (#96)
f6b071f is described below

commit f6b071fb6832eaac9d180e7a9ab0ee57e4dcbe2d
Author: Mr-Mu <[email protected]>
AuthorDate: Tue May 10 03:14:07 2022 -0500

    [hotfix] Fix finding buckets error in Bucketizer (#96)
    
    This closes #96.
---
 .../flink/ml/feature/bucketizer/Bucketizer.java    |  4 +--
 .../apache/flink/ml/feature/BucketizerTest.java    | 38 ++++++++++++----------
 2 files changed, 22 insertions(+), 20 deletions(-)

diff --git 
a/flink-ml-lib/src/main/java/org/apache/flink/ml/feature/bucketizer/Bucketizer.java
 
b/flink-ml-lib/src/main/java/org/apache/flink/ml/feature/bucketizer/Bucketizer.java
index 836e30b..8afefcb 100644
--- 
a/flink-ml-lib/src/main/java/org/apache/flink/ml/feature/bucketizer/Bucketizer.java
+++ 
b/flink-ml-lib/src/main/java/org/apache/flink/ml/feature/bucketizer/Bucketizer.java
@@ -110,13 +110,13 @@ public class Bucketizer implements 
Transformer<Bucketizer>, BucketizerParams<Buc
                 if (!Double.isNaN(feature)) {
                     int index = Arrays.binarySearch(splits, feature);
                     if (index >= 0) {
-                        if (index == inputCols.length - 1) {
+                        if (index == splits.length - 1) {
                             index--;
                         }
                         outputRow.setField(i, index);
                     } else {
                         index = -index - 1;
-                        if (index == 0 || index == inputCols.length) {
+                        if (index == 0 || index == splits.length) {
                             isInvalid = true;
                         } else {
                             outputRow.setField(i, index - 1);
diff --git 
a/flink-ml-lib/src/test/java/org/apache/flink/ml/feature/BucketizerTest.java 
b/flink-ml-lib/src/test/java/org/apache/flink/ml/feature/BucketizerTest.java
index 4a7306c..7170103 100644
--- a/flink-ml-lib/src/test/java/org/apache/flink/ml/feature/BucketizerTest.java
+++ b/flink-ml-lib/src/test/java/org/apache/flink/ml/feature/BucketizerTest.java
@@ -55,21 +55,22 @@ public class BucketizerTest extends AbstractTestBase {
 
     private static final List<Row> inputData =
             Arrays.asList(
-                    Row.of(1, -0.5, 0.0, 1.0),
-                    Row.of(2, Double.NEGATIVE_INFINITY, 1.0, 
Double.POSITIVE_INFINITY),
-                    Row.of(3, Double.NaN, -0.5, -0.5));
+                    Row.of(1, -0.5, 0.0, 1.0, 0.0),
+                    Row.of(2, Double.NEGATIVE_INFINITY, 1.0, 
Double.POSITIVE_INFINITY, 1.0),
+                    Row.of(3, Double.NaN, -0.5, -0.5, 2.0));
 
     private static final Double[][] splitsArray =
             new Double[][] {
                 new Double[] {-0.5, 0.0, 0.5},
                 new Double[] {-1.0, 0.0, 2.0},
-                new Double[] {Double.NEGATIVE_INFINITY, 10.0, 
Double.POSITIVE_INFINITY}
+                new Double[] {Double.NEGATIVE_INFINITY, 10.0, 
Double.POSITIVE_INFINITY},
+                new Double[] {Double.NEGATIVE_INFINITY, 1.5, 
Double.POSITIVE_INFINITY}
             };
 
     private final List<Row> expectedKeepResult =
-            Arrays.asList(Row.of(1, 0, 1, 0), Row.of(2, 2, 1, 1), Row.of(3, 2, 
0, 0));
+            Arrays.asList(Row.of(1, 0, 1, 0, 0), Row.of(2, 2, 1, 1, 0), 
Row.of(3, 2, 0, 0, 1));
 
-    private final List<Row> expectedSkipResult = 
Collections.singletonList(Row.of(1, 0, 1, 0));
+    private final List<Row> expectedSkipResult = 
Collections.singletonList(Row.of(1, 0, 1, 0, 0));
 
     @Before
     public void before() {
@@ -80,7 +81,8 @@ public class BucketizerTest extends AbstractTestBase {
         env.enableCheckpointing(100);
         env.setRestartStrategy(RestartStrategies.noRestart());
         tEnv = StreamTableEnvironment.create(env);
-        inputTable = 
tEnv.fromDataStream(env.fromCollection(inputData)).as("id", "f1", "f2", "f3");
+        inputTable =
+                tEnv.fromDataStream(env.fromCollection(inputData)).as("id", 
"f1", "f2", "f3", "f4");
     }
 
     @SuppressWarnings("all")
@@ -109,12 +111,12 @@ public class BucketizerTest extends AbstractTestBase {
         assertEquals(HasHandleInvalid.ERROR_INVALID, 
bucketizer.getHandleInvalid());
 
         bucketizer
-                .setInputCols("f1", "f2", "f3")
-                .setOutputCols("o1", "o2", "o3")
+                .setInputCols("f1", "f2", "f3", "f4")
+                .setOutputCols("o1", "o2", "o3", "o4")
                 .setHandleInvalid(HasHandleInvalid.SKIP_INVALID)
                 .setSplitsArray(splitsArray);
-        assertArrayEquals(new String[] {"f1", "f2", "f3"}, 
bucketizer.getInputCols());
-        assertArrayEquals(new String[] {"o1", "o2", "o3"}, 
bucketizer.getOutputCols());
+        assertArrayEquals(new String[] {"f1", "f2", "f3", "f4"}, 
bucketizer.getInputCols());
+        assertArrayEquals(new String[] {"o1", "o2", "o3", "o4"}, 
bucketizer.getOutputCols());
         assertEquals(HasHandleInvalid.SKIP_INVALID, 
bucketizer.getHandleInvalid());
 
         Double[][] setSplitsArray = bucketizer.getSplitsArray();
@@ -128,13 +130,13 @@ public class BucketizerTest extends AbstractTestBase {
     public void testOutputSchema() {
         Bucketizer bucketizer =
                 new Bucketizer()
-                        .setInputCols("f1", "f2", "f3")
-                        .setOutputCols("o1", "o2", "o3")
+                        .setInputCols("f1", "f2", "f3", "f4")
+                        .setOutputCols("o1", "o2", "o3", "o4")
                         .setHandleInvalid(HasHandleInvalid.SKIP_INVALID)
                         .setSplitsArray(splitsArray);
         Table output = bucketizer.transform(inputTable)[0];
         assertEquals(
-                Arrays.asList("id", "f1", "f2", "f3", "o1", "o2", "o3"),
+                Arrays.asList("id", "f1", "f2", "f3", "f4", "o1", "o2", "o3", 
"o4"),
                 output.getResolvedSchema().getColumnNames());
     }
 
@@ -142,8 +144,8 @@ public class BucketizerTest extends AbstractTestBase {
     public void testTransform() throws Exception {
         Bucketizer bucketizer =
                 new Bucketizer()
-                        .setInputCols("f1", "f2", "f3")
-                        .setOutputCols("o1", "o2", "o3")
+                        .setInputCols("f1", "f2", "f3", "f4")
+                        .setOutputCols("o1", "o2", "o3", "o4")
                         .setSplitsArray(splitsArray);
 
         Table output;
@@ -177,8 +179,8 @@ public class BucketizerTest extends AbstractTestBase {
     public void testSaveLoadAndTransform() throws Exception {
         Bucketizer bucketizer =
                 new Bucketizer()
-                        .setInputCols("f1", "f2", "f3")
-                        .setOutputCols("o1", "o2", "o3")
+                        .setInputCols("f1", "f2", "f3", "f4")
+                        .setOutputCols("o1", "o2", "o3", "o4")
                         .setHandleInvalid(HasHandleInvalid.KEEP_INVALID)
                         .setSplitsArray(splitsArray);
         Bucketizer loadedBucketizer =

Reply via email to