用户工具

站点工具


call:udf

这是本文档旧的修订版!


HIVE UDF方式进行调用

使用hive udf进行模型调用,有以下两种方案:

  • 使用eppdev-mlib-sdk-hive-udf原生方案,在进行udf调用的时候需要首先输入

网关地址url、模型编码信息

  • 使用自定义udf,在进行调用的时候可以配置无需输入网关地址、模型编码信

使用原生方案

下载相应的软件包

目前eppdev-mlib提供的原生udf支持hive1.2, 2.3, 3.1三个版本,需要分别下载不同 的jar包来完成模型的调用:

  • hive1.2: eppdev-mlib-sdk-hive-udf12.jar
  • hive2.3: eppdev-mlib-sdk-hive-udf23.jar
  • hive3.1: eppdev-mlib-sdk-hive-udf31.jar

上传jar到hdfs中

以hive2.3为例:

hdfs dfs put eppdev-mlib-sdk-hive-udf23.jar /user/udf/hive/

在hive中创建自定义函数

CREATE FUNCTION eppdev_to_json AS 'cn.eppdev.mlib.sdk.hive.udf.EppdevMlibToJsonUDF' 
     USING jar 'hdfs://user/udf/hive/eppdev-mlib-sdk-hive-udf23.jar';
CREATE FUNCTION eppdev_mlib_calc AS 'cn.eppdev.mlib.sdk.hive.udf.EppdevMlibCalcUDF'
     USING jar 'hdfs://user/udf/hive/eppdev-mlib-sdk-hive-udf23.jar';

在hive中进行模型调用

进行hive调用可以有两种方式:

  1. 输入3个参数(网关地址、模型编码、请求数据json),可以获取到全量的模型输入
  2. 输入4个参数(网关地址、模型编码、请求json和所需的输出项),可以获取指定的输出项

方法1: 三个参数获取结果json

SELECT 
    eppdev_mlib_calc(
        'http://localhost:11541/consumer',
        'test-01',
        eppdev_to_json(
            'sepal.width', sepal_with,
            'sepal.height', sepal_height,
            'petal.width', petal_width,
            'petal.height', petal_height
        )
    ) AS full_result
FROM iris_data;

输出结果为全量的json:

{
    "probability(Setosa)": 1.0,
    "probability(Virginica)": 0.0,
    "probability(Versicolor)": 0.0,
    "variety": "Setosa"
}

方法2:输入4个参数,直接获取具体结果

SELECT 
    eppdev_mlib_calc(
        'http://localhost:11541/consumer',
        'test-01',
        eppdev_to_json(
            'sepal.width', sepal_with,
            'sepal.height', sepal_height,
            'petal.width', petal_width,
            'petal.height', petal_height
        ),
        'variety'
    ) AS variety
FROM iris_data;

输出结果为veriety结果,如:Setosa

call/udf.1577602550.txt.gz · 最后更改: 2020/07/12 12:07 (外部编辑)