MaxCompute UDF系列之全角转半角

简介: 我们在做文本挖掘处理的时候,需要经常把全角字符转成半角处理,今天为大家提供一个全角转半角的MaxCompute UDF,下载地址见附件。 效果如下: MaxCompute UDF代码如下: package com.

我们在做文本挖掘处理的时候,需要经常把全角字符转成半角处理今天为大家提供一个全角转半角的MaxCompute UDF,下载地址见附件。


效果如下:



MaxCompute UDF代码如下:


package com.yinlin.udf.dev;
import com.aliyun.odps.udf.UDF; 
//import org.apache.commons.lang.StringUtils;
/**
* 提供对字符串的全角->半角,半角->全角转换
*/
public class BCConvert extends UDF {
/**
* ASCII表中可见字符从!开始,偏移位值为33(Decimal)
*/
static final char DBC_CHAR_START = 33; // 半角!
/**
* ASCII表中可见字符到~结束,偏移位值为126(Decimal)
*/
static final char DBC_CHAR_END = 126; // 半角~
/**
* 全角对应于ASCII表的可见字符从!开始,偏移值为65281
*/
static final char SBC_CHAR_START = 65281; // 全角!
/**
* 全角对应于ASCII表的可见字符到~结束,偏移值为65374
*/
static final char SBC_CHAR_END = 65374; // 全角~
/**
* ASCII表中除空格外的可见字符与对应的全角字符的相对偏移
*/
static final int CONVERT_STEP = 65248; // 全角半角转换间隔
/**
* 全角空格的值,它没有遵从与ASCII的相对偏移,必须单独处理
*/
static final char SBC_SPACE = 12288; // 全角空格 12288
/**
* 半角空格的值,在ASCII中为32(Decimal)
*/
static final char DBC_SPACE = ' '; // 半角空格
/**
* 全角字符->半角字符转换
* 只处理全角的空格,全角!到全角~之间的字符,忽略其他
*/
public String evaluate(String src) {
  if (src == null) {return src;}
  StringBuilder buf = new StringBuilder(src.length());
  char[] ca = src.toCharArray();
  for (int i = 0; i < src.length(); i++) {
      if      (ca[i] >= SBC_CHAR_START && ca[i] <= SBC_CHAR_END) 
              {// 如果位于全角!到全角~区间内
               buf.append((char) (ca[i] - CONVERT_STEP));
              }
      else if (ca[i] == SBC_SPACE) 
              {// 如果是全角空格
               buf.append(DBC_SPACE);
              }
      else    { // 不处理全角空格,全角!到全角~区间外的字符
               buf.append(ca[i]);
              }
      }
  return buf.toString();
  }
}


使用方法:

1、通过Eclipse将BCConver.java编译成Jar包,命名为BCConver.jar。


2、通过大数据开发套件,上传资源BCConver.jar;




3、通过大数据开发套件,引用第二步上传的BCConver.jar资源,注册bcconver函数;


4、通过大数据开发套件新建SQL脚本,输入SQL函数进行测试。


--创建虚拟表
CREATE TABLE IF NOT EXISTS dual (id STRING);
insert into table dual select '1' from (select count(1) from dual) t;


--提供对字符串的全角->半角
select bcconvert('nihaohk |   nihehe ,。 78  7 ')  from yinlin_demo.dual limit 1;


到此为止,实验完成。


常见问题

Q:无结果?

我们在创建虚拟dual表的时候,一定要保证表中有数据。


Q:无法找到函数?

利用大数据开发套件注册函数的时候需要包名+类名,否则会找不到类。



阿里巴巴大数据-玩家社区 https://yq.aliyun.com/teams/6/

---阿里大数据博文,问答,社群,实践,有朋自远方来,不亦说乎……

bba01b493e1c5d904e882b1c380673c6ebe49a98

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
9天前
|
分布式计算 DataWorks 数据管理
DataWorks操作报错合集之DataWorks中udf开发完后,本地和在MaxCompute的工作区可以执行函数查询,但是在datawork里报错FAILED: ODPS-0130071:[2,5],是什么原因
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
24 0
|
9天前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在 DataWorks 中的 ODPS UDF(User-Defined Function,用户自定义函数)中,支持不定长参数如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
14 0
|
9天前
|
分布式计算 DataWorks Java
DataWorks产品使用合集之阿里云DataWorks专有云环境下,上传MaxCompute的UDF(用户自定义函数)的JAR包的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
20 0
|
10天前
|
分布式计算 DataWorks Java
MaxCompute操作报错合集之DataWorks中udf开发完后,报错了,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
7月前
|
SQL 分布式计算 Java
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
|
SQL 存储 分布式计算
MaxCompute 的UDF函数如何批量从一个开发环境注册到生产环境
MaxCompute 的UDF函数如何批量从一个开发环境注册到生产环境
111 0
|
SQL 编解码 分布式计算
【MaxCompute 常见问题】 UDF
查看资源信息 假设资源名称为 pyudf_test.py,在 odpscmd 客户端执行 desc resource pyudf_test.py;,或在 datastudio 中新建 SQL 节点后输入 desc resource pyudf_test.py;执行。
【MaxCompute 常见问题】 UDF
|
SQL 分布式计算 DataWorks
MaxCompute-Java自建UDF入门详解
MaxCompute-Java自建UDF入门详解
|
SQL 分布式计算 DataWorks
ODPS Python3开发UDF实践 dataworks平台
# 业务背景 花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息. 用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着. 业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营 # 解决思路 这个问题有两个解法 #### 1. ODPS SQL解法 每月月末跑一个数, 统计本月用户
4342 0
ODPS Python3开发UDF实践 dataworks平台
|
SQL 分布式计算 Java
MaxCompute中Struct复杂数据类型的UDF编写、兼容HIVE的GenericUDF编写
MaxCompute 2.0版本升级后,Java UDF支持的数据类型从原来的BIGINT、STRING、DOUBLE、BOOLEAN扩展了更多基本的数据类型,同时还扩展支持了ARRAY、MAP、STRUCT等复杂类型,以及Writable参数。
2114 0
MaxCompute中Struct复杂数据类型的UDF编写、兼容HIVE的GenericUDF编写

热门文章

最新文章

相关产品

  • 云原生大数据计算服务 MaxCompute