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

myui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hivemall.git


The following commit(s) were added to refs/heads/master by this push:
     new c143608  [HIVEMALL-249] Fix fmeasure UDAF to support any integers
c143608 is described below

commit c143608dce7e57109cf23402aad96e3a4c55ac49
Author: Makoto Yui <m...@apache.org>
AuthorDate: Mon Nov 25 17:50:35 2019 +0900

    [HIVEMALL-249] Fix fmeasure UDAF to support any integers
    
    ## What changes were proposed in this pull request?
    
    Fix fmeasure UDAF to support any integers
    
    ## What type of PR is it?
    
    Hot Fix
    
    ## What is the Jira issue?
    
    https://issues.apache.org/jira/browse/HIVEMALL-249
    
    ## How to use this feature?
    
    ```sql
    create table data2 as
      select 1.1 as truth, 0 as predicted
    union all
      select 0.0 as truth, 1 as predicted
    union all
      select 0.0 as truth, 0 as predicted
    union all
      select 1.0 as truth, 1 as predicted
    union all
      select 0.0 as truth, 1 as predicted
    union all
      select 0.0 as truth, 0 as predicted
    ;
    
    select fmeasure(truth, predicted, '-average binary') from data;
    ```
    
    ## How was this patch tested?
    
    manual tests on EMR
    
    ## Checklist
    
    - [x] Did you apply source code formatter, i.e., `./bin/format_code.sh`, 
for your commit?
    - [x] Did you run system tests on Hive (or Spark)?
    
    Author: Makoto Yui <m...@apache.org>
    
    Closes #215 from myui/HIVEMALL-249.
---
 core/src/main/java/hivemall/evaluation/FMeasureUDAF.java | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/hivemall/evaluation/FMeasureUDAF.java 
b/core/src/main/java/hivemall/evaluation/FMeasureUDAF.java
index d3f39a4..314fa8c 100644
--- a/core/src/main/java/hivemall/evaluation/FMeasureUDAF.java
+++ b/core/src/main/java/hivemall/evaluation/FMeasureUDAF.java
@@ -45,11 +45,12 @@ import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.StructField;
 import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
 import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector;
-import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.IntObjectInspector;
 import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
 import org.apache.hadoop.io.LongWritable;
 
@@ -239,17 +240,16 @@ public final class FMeasureUDAF extends 
AbstractGenericUDAFResolver {
                         asIntLabel(parameters[0], (BooleanObjectInspector) 
actualOI));
                     predicted = Arrays.asList(
                         asIntLabel(parameters[1], (BooleanObjectInspector) 
predictedOI));
-                } else { // int case
+                } else { // integer case
                     final int actualLabel =
-                            asIntLabel(parameters[0], (IntObjectInspector) 
actualOI);
+                            asIntLabel(parameters[0], 
HiveUtils.asIntegerOI(actualOI));
                     if (actualLabel == 0 && "binary".equals(average)) {
                         actual = Collections.emptyList();
                     } else {
                         actual = Arrays.asList(actualLabel);
                     }
-
                     final int predictedLabel =
-                            asIntLabel(parameters[1], (IntObjectInspector) 
predictedOI);
+                            asIntLabel(parameters[1], 
HiveUtils.asIntegerOI(predictedOI));
                     if (predictedLabel == 0 && "binary".equals(average)) {
                         predicted = Collections.emptyList();
                     } else {
@@ -270,8 +270,8 @@ public final class FMeasureUDAF extends 
AbstractGenericUDAFResolver {
         }
 
         private static int asIntLabel(@Nonnull final Object o,
-                @Nonnull final IntObjectInspector intOI) throws 
UDFArgumentException {
-            final int value = intOI.get(o);
+                @Nonnull final PrimitiveObjectInspector intOI) throws 
UDFArgumentException {
+            final int value = PrimitiveObjectInspectorUtils.getInt(o, intOI);
             switch (value) {
                 case 1:
                     return 1;

Reply via email to