如何使用hive中现有的内置udf编写 Package 器?

0vvn1miw  于 2021-06-29  发布在  Hive
关注(0)|答案(2)|浏览(441)

我正在尝试在hive中创建新的自定义项。有些自定义项只是hive中内置自定义项的修改。
e、 g中值函数写为

select percentile(cast(column as BIGINT), 0.5) from table_name

这意味着,每当我必须计算中间值时,我就必须重写上面指定的查询。有没有什么方法可以创建一个新的udf并将现有的udf百分位数 Package 到java代码中?
如何创建一个新的自定义项,它将是现有内置自定义项的 Package 器?

yk9xbfzb

yk9xbfzb1#

所有配置单元UDF都可以从spark sql访问。您可以在sparksql中重新定义自己的自定义项,并在其中使用配置单元自定义项。sqlcontext.udf.register((x,percentilevalue)=>{//使用这些参数实现方法})

fjaof16o

fjaof16o2#

你可以用 callUDF 功能:

import org.apache.spark.sql.functions.{callUDF, lit}

val df = Seq((1L, 3L), (2L, 5L), (3L, 4L)).toDF("id", "x")
df.select(callUDF("percentile", $"x", lit(0.5)))

所以中值是这样的函数:

def median(expr: org.apache.spark.sql.Column): org.apache.spark.sql.Column = {
  callUDF("percentile", expr, lit(0.5))
}

df.select(median($"x"))

但不能使用嵌套的udf调用。udf Package 一个函数,该函数对提取的值而不是列进行操作。

相关问题