You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemall.apache.org by my...@apache.org on 2019/06/10 06:51:22 UTC

[incubator-hivemall] 07/10: minor refactoring

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

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

commit 44ff4bbb46ae9398d3f078f54fd81196599b0eba
Author: Makoto Yui <my...@apache.org>
AuthorDate: Mon Jun 10 15:46:36 2019 +0900

    minor refactoring
---
 .../java/hivemall/tools/map/MapRouletteUDF.java    | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/core/src/main/java/hivemall/tools/map/MapRouletteUDF.java b/core/src/main/java/hivemall/tools/map/MapRouletteUDF.java
index 084653b..40d97c7 100644
--- a/core/src/main/java/hivemall/tools/map/MapRouletteUDF.java
+++ b/core/src/main/java/hivemall/tools/map/MapRouletteUDF.java
@@ -28,15 +28,18 @@ import static hivemall.HivemallConstants.STRING_TYPE_NAME;
 import static hivemall.HivemallConstants.TINYINT_TYPE_NAME;
 
 import hivemall.utils.hadoop.HiveUtils;
+import hivemall.utils.lang.StringUtils;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
@@ -55,7 +58,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectIn
 @Description(name = "map_roulette", value = "_FUNC_(Map<K, number> map)"
         + " - Returns a map key based on weighted random sampling of map values")
 @UDFType(deterministic = false, stateful = false) // it is false because it return value base on probability
-public class MapRouletteUDF extends GenericUDF {
+public final class MapRouletteUDF extends GenericUDF {
 
     /**
      * The map passed in saved all the value and its weight
@@ -63,7 +66,12 @@ public class MapRouletteUDF extends GenericUDF {
      * @param m A map contains a lot of item as key, with their weight as value
      * @return The key that computer selected according to key's weight
      */
-    private static Object algorithm(Map<Object, Double> m) {
+    @Nullable
+    private static Object algorithm(@Nonnull final Map<Object, Double> m) {
+        if (m.isEmpty()) {
+            return null;
+        }
+
         // normalize the weight
         double sum = 0;
         for (Map.Entry<Object, Double> entry : m.entrySet()) {
@@ -75,7 +83,7 @@ public class MapRouletteUDF extends GenericUDF {
 
         // sort and generate a number axis
         List<Map.Entry<Object, Double>> entryList = new ArrayList<>(m.entrySet());
-        Collections.sort(entryList, new MapRouletteUDF.KvComparator());
+        Collections.sort(entryList, new KvComparator());
         double tmp = 0;
         for (Map.Entry<Object, Double> entry : entryList) {
             tmp += entry.getValue();
@@ -140,10 +148,6 @@ public class MapRouletteUDF extends GenericUDF {
         if (input == null) {
             return null;
         }
-        // handle empty map
-        if (input.isEmpty()) {
-            return null;
-        }
         return algorithm(input);
     }
 
@@ -194,7 +198,7 @@ public class MapRouletteUDF extends GenericUDF {
 
     @Override
     public String getDisplayString(String[] children) {
-        return "map_roulette(" + Arrays.toString(children) + ")";
+        return "map_roulette(" + StringUtils.join(children, ',') + ")";
     }
 
     private static class KvComparator implements Comparator<Map.Entry<Object, Double>> {