hadoop中汉字与英文字符混合的关键字做为combine的key的问题

来源:互联网 发布:sql语句获取前一天 编辑:程序博客网 时间:2024/05/22 00:07

最近,需要将汉字与字符的很合串作为combine的输出的key,

这样做是希望,利用hadoop的归并来按照key进行分组,然后,在reduce阶段,拿到的都是一个一个组。

但是,发现,这种,汉字混合的传做key,竟然,在reduce阶段中,接受的的key并不是唯一的,于是,考虑利用转码来实现。

最终,问题解决了。

package test.com.gjob.services;     import java.util.Properties;      public class Test {              public static void main(String[] args) {              String s = "简介";             String tt = gbEncoding(s);      //       String tt1 = "你好,我想给你说一个事情";            System.out.println(decodeUnicode("\\u7b80\\u4ecb"));      //       System.out.println(decodeUnicode(tt1));             System.out.println(HTMLDecoder.decode("中国"));            String s1 = "\u7b80\u4ecb";            System.out.println(s.indexOf("\\"));           }           public static String gbEncoding(final String gbString) {           char[] utfBytes = gbString.toCharArray();                 String unicodeBytes = "";                  for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {                       String hexB = Integer.toHexString(utfBytes[byteIndex]);                         if (hexB.length() <= 2) {                             hexB = "00" + hexB;                        }                         unicodeBytes = unicodeBytes + "\\u" + hexB;                     }                     System.out.println("unicodeBytes is: " + unicodeBytes);                     return unicodeBytes;                }                           public static String decodeUnicode(final String dataStr) {                  int start = 0;                    int end = 0;                   final StringBuffer buffer = new StringBuffer();                    while (start > -1) {                       end = dataStr.indexOf("\\u", start + 2);                        String charStr = "";                        if (end == -1) {                            charStr = dataStr.substring(start + 2, dataStr.length());                       } else {                           charStr = dataStr.substring(start + 2, end);                        }                        char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。                      buffer.append(new Character(letter).toString());                      start = end;                    }                    return buffer.toString();                }            }   


4 0