hive的udf,过滤表情等非法字符

在处理从Hive导出至MySQL时遇到由于表情等非UTF-8字符导致的错误。为解决此问题,创建了一个UDF用于过滤昵称中的非法字符。该UDF逻辑在Linux环境中打包,并在Hive命令行中调用。但由于Hive重启会丢失UDF注册,建议在shell脚本或hive命令中每次使用时重新注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际工作环境中hive导出数据到Mysql,总是报错
ncorrect string value: ‘\xF0\x9F\x98\x97\xF0\x9F…’
这是由于手机表情不支持UTF-8的
运营那边需要nickname,所以就将昵称中的表情过滤掉

1.写过滤表情逻辑

/**
 * Created by Liutao on 2019/5/22 16:31
 */
public class FilterEmo extends UDF {
    public String evaluate(String str) {
        StringBuffer out = new StringBuffer();
        if (str == null || ("".equals(str)))
            return "";
        char[] chars = str.toCharArray();
        for(int i = 0; i < chars.length; i ++) {
            if((chars[i] >= 19968 && chars[i] <= 40869) //中日朝兼容形式的unicode编码范围: U+4E00——U+9FA5
                    || (chars[i] >= 11904 && chars[i] <= 42191)//中日朝兼容形式扩展
                    || (chars[i] >= 63744 && chars[i] <= 64255)//中日朝兼容形式扩展
                    || (chars[i] >= 65072 && chars[i] <= 65103)//中日朝兼容形式扩展
                    || (chars[i] >= 65280 && chars[i] <= 65519)//全角ASCII、全角中英文标点、半宽片假
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值