需求:自定义UDF函数,将字符串转化为拼音
异常:创建函数时报错
starrocks版本:2.3.2
函数主体:
public class UDF2Pinyin {
private static final HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
static {
format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写输出
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不带音标
format.setVCharType(HanyuPinyinVCharType.WITH_V); // u 输出为 v
}
public final String evaluate(String value) {
if (Objects.isNull(value))
return null;
char[] input = value.trim().toCharArray();
StringBuilder output = new StringBuilder();
try {
for (char c : input) {
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format);
output.append(temp[0]);
}else {
output.append(c);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
return value;
}
return output.toString();
}
public static void main(String[] args) {
UDF2Pinyin pinyin = new UDF2Pinyin();
System.out.println(pinyin.evaluate("张三"));
}
}
pom依赖:
<dependencies>
<!--汉语拼音-->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
打包插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
将udf函数逻辑,替换为String.value.toUpperCase()测试,可以成功注册函数并使用,排除环境问题。所以不知道是不是这个转拼音的jar包和starrocks不兼容呢?
试一下2.3.3呢