作者:余枫

1.问题重现

  • 测试环境:

1.RedHat7.2

2.CDH6.2.0

3.使用root进行操作

1.在Hive中创建一个表,并导入数据如下

2.对s2字段进行排序

select * from hanzi order by s2; 

在Hive中:

在Impala中:

由上面两张图可以看出,在Hive和Impala中排序都失败了,没有按照期望中的中文对应的拼音进行排序。

2.问题解决

1.想要实现对中文字段的排序,需要将中文字段转换成拼音,然后在Hive、Impala中对拼音进行排序即可。因此可以使用UDF在Java中写一个汉字转拼音的程序,然后在Hive、Impala中使用,代码如下:

public String evaluate(String ChineseLanguage) { char[] cl_chars = ChineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部小写 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调 defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V); try { for (int i = 0; i < cl_chars.length; i++) { if (String.valueOf(cl_chars[i]).matches("[一-龥]+")) {// 如果字符是中文,则将中文转为汉语拼音 hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0]; } else {// 如果字符不是中文,则不转换 hanyupinyin += cl_chars[i]; } } } catch (BadHanyuPinyinOutputFormatCombination e) { System.out.println("字符不能转成汉语拼音"); } return hanyupinyin;}

2.将编写好的代码打成jar包并上传到服务器

打包前在POM文件中加入配置,将所有依赖也一起打成一个jar包

 maven-assembly-plugin cn.com.gzcb.hive.udf.HanyuPinyinHelperjar-with-dependenciesorg.apache.hive hive-exec 2.1.1-cdh6.2.0com.belerweb pinyin4j 2.5.0

使用mvn assembly:assembly命令打包,打好的包如下,以-jar-with-dependencies结尾

上传到服务器

3.将jar包上传到HDFS,创建UDF函数

上传到/user/hive/udfjar目录下

进入Hive中,创建UDF函数

create function default.parse_chinese as 'cn.com.gzcb.hive.udf.HanyuPinyinHelper' using jar 'hdfs://cdh177.macro.com:8020/user/hive/udfjar/hive-udf-0.0.1-SNAPSHOT-jar-with-dependencies.jar';

4.再次对hanzi表进行排序

select s2,parse_chinese(s2) as s3 from hanzi order by s3;

Hive

Impala

从Hive和Impala的执行结果可以看出,是按照拼音的升序成功进行了排序。

3.问题总结

无论是Hive还是Impala都不支持中文按照拼音的排序,因为它们支持的主要是标准的ASCII字符集并不包含中文,如果要对中文按照拼音排序,需要通过UDF将中文转换成拼音后实现,而中文转换成拼音的函数Java中有很多现成的参考比较方便。

hive 中文字符过滤_0650-6.2.0-通过UDF实现HiveImpala的中文拼音排序相关推荐

  1. 中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例

    java正则匹配HTML中a标签里的中文字符示例 发布于 2020-8-12| 复制链接 摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符.分享给大家供大家参考,具体如下:今天群里一 ...

  2. hive 中文字符过滤_hive中文字符乱码 解决方法【转】

    一.个人初始开发环境的基本情况以及Hive元数据库说明 ①hive的元数据库改成了mysql(安装完mysql之后也没有进行其它别的设置) ②hive-site.xml中设置元数据库对应的配置为  j ...

  3. hive 中文字符过滤_Hive UDF 过滤字符串中的中英文标点符号

    使用Hive 过程中 需要做一些UDF的开发,简单贴一个UDF 是用来去除字符串中的所有中英文符号 本人Java菜鸟 代码可能不好看勿喷啊.仅供参考 package com.fccs.utils; i ...

  4. php正则获取标签,PHP通过正则匹配中文字符 过滤html标签 获取文本内容

    正则匹配中文汉字根据页面编码不同而略有区别: GBK/GB2312编码:[x80-xff]+ 或 [xa1-xff]+ UTF-8编码:[x{4e00}-x{9fa5}]+/u [php] $str ...

  5. java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符

    正则表达式:java中匹配HTML中a标签中的中文字符 今天群里一位朋友问到了一个正则表达式的问题,有如下内容: 特432 453543 a1特123你好123吗? 特2 标签中的文字现在要匹配出内容 ...

  6. tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...

    TinyXML-2 是一个用 C++ 开发的小巧.高效的 XML 解析工具,它在 GitHub 网站上的链接为: https://github.com/leethomason/tinyxml2 .它的 ...

  7. 0020-使用JDBC向Kudu表插入中文字符-双引号的秘密

    温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.问题描述 使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断. 2.问题复现 测试环境: ...

  8. MySQL判断中文字符的方法(转)

    准备: 2.1.环境 MySQL mysql> SHOW VARIABLES LIKE "%version%"; +-------------------------+--- ...

  9. 解决 Javascript 中 atob 方法解码中文字符乱码问题

    转载地址:http://blog.sqrtthree.com/2015/08/29/utf8-to-b64/ 首先, 为什么要编码? 由于一些网络通讯协议的限制, 又或者是出于信息加密的目的, 我们就 ...

最新文章

  1. 通信网络设计(最小生成树+图的联通)
  2. 招聘 | 阿里巴巴搜索推荐事业部-知识图谱校招
  3. 如何使用Twitter Bootstrap获得中心内容?
  4. Journey to Un‘Goro 贪心,找规律,搜索(沈阳)
  5. 4.1.2 OS之文件逻辑结构(顺序文件、索引文件、索引顺序文件、多级索引顺序文件)关于数据库的索引如聚簇索引可以看一下索引文件例题的解析,感觉还是可以收获到东西的
  6. 逆天Kali带你游遍大江南北~安全之前人铺路!
  7. 洛谷 P3469 [POI2008]BLO-Blockade (Tarjan,割点)
  8. ffmpeg库编译加文字_1.编译ffmpeg库
  9. C语言模拟实现标准库函数之memcpy()
  10. 对公平席位分配问题的探讨:最大余数法、Q值法和D’Hondt方法及其特例|公平分配原则等
  11. 《王者荣耀》宣布将推独立女子电竞赛事:跟进奥运会
  12. matlab prn文件,PRN文件扩展名 - 什么是.prn以及如何打开? - ReviverSoft
  13. 关于ModbusTCP通讯汇川PLC
  14. 华为m2青春版android7,7吋巨屏跨界之作 华为揽阅M2青春版评测
  15. [Excel常用函数] countif countifs函数
  16. word文档找不到smartart_图文详解Word文档插入SmartArt图形的方法
  17. python爬虫之无界面模式操作/scrapy框架
  18. Rust 安装,卸载,nightly/stable版本切换(全局或工作空间),提高下载速度
  19. DZ论坛克米模板3.5版全解密+完整插件/教程
  20. 浅谈服务端渲染(SSR) 与使用场景

热门文章

  1. 结构体struct的定义和使用
  2. 微软发布 PowerToys 0.12.0,带来批量处理工具和暗黑模式
  3. Bare HTTP不完全是RESTful
  4. Redis:复制,第1部分——概述 复制与分片、哨兵与集群、Redis拓扑
  5. c# 日期转换为单词
  6. 人工智能是一个工程问题,而不是魔术!
  7. java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...
  8. 各种水龙头拆卸图解_各种水龙头拆卸图解法
  9. python 享元模式_设计模式-创建型模式,python享元模式 、python单例模式(7)
  10. 提高学生对计算机学科学习兴趣的研究的结题报告,《如何在体育教学中运用体育游戏》的研究结题报告...