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;
}