对于某个拥有多个kv的字段,例如:
String:{0:3,7227205346742:1,1797840830081:1,8089654234544:1,6255030172978:1,-1:9}
这里面有6个kv,要将该string解析成map,代码如下
public class MapUtil {
public static Map<String, String> strToMap(String text, String delimiter1, String delimiter2) {
Map<String, String> ret = new HashMap<>();
// {0:3,7227205346742:1,1797840830081:1,8089654234544:1,6255030172978:1,-1:9}
String[] keyValuePairs = text.split(delimiter1);
int len$ = keyValuePairs.length;
for (int i = 0; i < len$; ++i) {
String keyValuePair = keyValuePairs[i];
String[] keyValue = keyValuePair.split(delimiter2, 2);
if (keyValue.length < 2) {
ret.put(keyValuePair, null);
} else {
ret.put(keyValue[0], keyValue[1]);
}
}
return ret;
}
}
然后在MR程序中调用函数输入分隔符参数即可
Map<String, String> eventMap = MapUtil.strToMap(eventDetail, "\002", "\003");
ps:在hive表中,默认多个kv之间用'\002'分隔,单个kv之间用'\003'分隔
解析出来的map结果如下:
Map<String, String>:eventMap = {0=3,7227205346742=1,1797840830081=1,8089654234544=1,6255030172978:1=1,-1=9}