HCATALOG-523 PigHCatUtil should not assume map key type can be casted to String

git-svn-id: https://svn.apache.org/repos/asf/incubator/hcatalog/trunk@1395816 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index b14deff..12c51e8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -121,6 +121,8 @@
   OPTIMIZATIONS
 
   BUG FIXES
+  HCAT-523 PigHCatUtil should not assume map key type can be casted to String (pengfeng via traviscrawford)
+
   HCAT-522 Make HCatHadoopShims.commitJob() generic (traviscrawford)
 
   HCAT-451 Partitions are created even when Jobs are aborted (avandana)
diff --git a/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java b/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java
index 2a5ec2a..817866f 100644
--- a/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java
+++ b/hcatalog-pig-adapter/src/main/java/org/apache/hcatalog/pig/PigHCatUtil.java
@@ -363,7 +363,7 @@
             result = transformToBag((List<? extends Object>) o, hfs);
             break;
         case MAP:
-            result = transformToPigMap((Map<String, Object>) o, hfs);
+            result = transformToPigMap((Map<Object, Object>) o, hfs);
             break;
         default:
             result = o;
@@ -372,7 +372,7 @@
         return result;
     }
 
-    public static Tuple transformToTuple(List<? extends Object> objList, HCatFieldSchema hfs) throws Exception {
+    private static Tuple transformToTuple(List<? extends Object> objList, HCatFieldSchema hfs) throws Exception {
         try {
             return transformToTuple(objList, hfs.getStructSubSchema());
         } catch (Exception e) {
@@ -384,7 +384,7 @@
         }
     }
 
-    public static Tuple transformToTuple(List<? extends Object> objList, HCatSchema hs) throws Exception {
+    private static Tuple transformToTuple(List<? extends Object> objList, HCatSchema hs) throws Exception {
         if (objList == null) {
             return null;
         }
@@ -396,20 +396,21 @@
         return t;
     }
 
-    public static Map<String, Object> transformToPigMap(Map<String, Object> map, HCatFieldSchema hfs) throws Exception {
+    private static Map<String, Object> transformToPigMap(Map<Object, Object> map, HCatFieldSchema hfs) throws Exception {
         if (map == null) {
             return null;
         }
 
         Map<String, Object> result = new HashMap<String, Object>();
-        for (Entry<String, Object> entry : map.entrySet()) {
-            result.put(entry.getKey(), extractPigObject(entry.getValue(), hfs.getMapValueSchema().get(0)));
+        for (Entry<Object, Object> entry : map.entrySet()) {
+            // since map key for Pig has to be Strings
+            result.put(entry.getKey().toString(), extractPigObject(entry.getValue(), hfs.getMapValueSchema().get(0)));
         }
         return result;
     }
 
     @SuppressWarnings("unchecked")
-    public static DataBag transformToBag(List<? extends Object> list, HCatFieldSchema hfs) throws Exception {
+    private static DataBag transformToBag(List<? extends Object> list, HCatFieldSchema hfs) throws Exception {
         if (list == null) {
             return null;
         }
@@ -454,6 +455,10 @@
                 break;
             case MAP:
                 // key is only string
+                if (hcatField.getMapKeyType() != Type.STRING) {
+                    LOG.info("Converting non-String key of map " + hcatField.getName() + " from "
+                        + hcatField.getMapKeyType() + " to String.");
+                }
                 validateHCatSchemaFollowsPigRules(hcatField.getMapValueSchema());
                 break;
             }