导航

关于在得帆云数据中台如何自定义函数

Posted on 2024-08-23 10:45  小温日记  阅读(61)  评论(0)    收藏  举报

UDF使用示例

场景说明:使用udf编写一个函数Unit_Conversion(value)。在函数中根据value的值进行单位转化,并进行类型转化。

1、导入依赖

在pom.xml中将如下依赖进行导入。

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>3.1.2</version>
        </dependency>

2、编写代码

创建UDF类,继承GenericUDF类。
注意:方法名称必须为evaluate,且其他调用的方法需要设置为private类型。

public class App extends UDF {
    public String evaluate(String data) {
        // 处理w单位的数据
        String convertedRange = convertUnits(data, "w", 4, 3);
        // 处理k单位的数据
        convertedRange = convertUnits(convertedRange, "k", 3, 2);
        return convertedRange;
    }

    private static String convertUnits(String input, String unit, int zerosForInteger, int zerosForDecimal) {
        Pattern pattern = Pattern.compile("(\\d+)(\\.\\d+)?" + unit);
        Matcher matcher = pattern.matcher(input);
        StringBuffer result = new StringBuffer();

        while (matcher.find()) {
            String integerPart = matcher.group(1);
            String decimalPart = matcher.group(2) != null ? matcher.group(2).substring(1) : ""; // 获取小数部分
            int zeroesToAdd = decimalPart.isEmpty() ? zerosForInteger : zerosForDecimal;
            String replacement = integerPart + decimalPart + repeat("0", zeroesToAdd);
            matcher.appendReplacement(result, replacement);
        }

        matcher.appendTail(result);
        return result.toString();
    }
}

3、打包上传jar

1、指定jar函数入口,配置在pom.xml文件中。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <!-- 函数入口,从哪个函数开始启动 -->
                            <mainClass>App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>6</source>
                    <target>6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、idea中可以直接将maven项目进行打包。
image
3、配置资源名称、选择类型等,并将刚刚打包完成的jar文件进行上传。(注意:jar文件尽量不需要导入太多了架包,中台有限制上传文件的大小)
image

4、新建自定义函数

image

5、使用函数

函数创建后,在项目内,可以在Hive作业里直接使用。
image