当前位置: 首页 > 知识库问答 >
问题:

在自定义配置单元UDF中重写的计算方法

罗建弼
2023-03-14
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

@Description(
		  name="SimpleUDFExample",
		  value="returns 'hello x', where x is whatever you give it (STRING)",
		  extended="SELECT simpleudfexample('world') from foo limit 1;"
		  )
class SimpleUDFExample extends UDF {
  
	public Text evaluate(Text input) {
	    if(input == null) return null;
	    return new Text("Hello " + input.toString());
	  }
}

共有1个答案

逑景铄
2023-03-14

在hive中,可以重载与Java相同的方法。但是在UDF中,你必须使用Hadoop数据类型,比如可写的,可浮点写的...

请在代码下面找到。

public class ToUpper extends UDF{

    public String evaluate(Text word) {
        String upperCase=word.toString();
        return upperCase;

    }

    public String evaluate(IntWritable word) {
        String upperCase="Error : Input type is Integer. Cannot convert to UpperCase";
        return upperCase;

    }

    public String evaluate(FloatWritable word) {
        String upperCase="Error : Input type is Float. Cannot convert to UpperCase";
        return upperCase;

    }

    public String evaluate(LongWritable word) {
        String upperCase="Error : Input type is Long. Cannot convert to UpperCase";
        return upperCase;

    }



}

有关UDF的更多信息,请访问此页

 类似资料:
  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 显然,它不会产生上面的输出,因为只有一个映射器,并且调用了相同的udf实例,该实例在总集上生成一个运行和。我的目标是为每个storeid重置udf类中的runningSum实例变量,以便evaluate函数返回上述输出。我使用了以下内容:1。传递storeid变量rsum(sales,storeid),然后我们就可以在udf类中正确地处理这种情况。2.使用以下查询中的2个映射器: 为什么1002总

  • 我已经在hive:udfrowsequence中尝试过这个UDF。 但是它不产生唯一的值,即它依赖于映射器重复序列。 假设我有一个文件(有4条记录)在HDFS中可用。它将为该作业创建一个映射器,结果将类似于 1 2 3 4 1 2 3 4 1 2 。

  • 摘要:关注与Hive中的UDF创建有关。 亲爱的朋友们,由于我是在Hive中创建UDF的新手(我通过google读过这方面的文章,但不是很清楚),我在这里的第一件事是确定哪一种可能是最好的方式,比如Java/Python或任何其他方式来编写Hive UDF。 另一件事是我应该在什么基础上分析?我应该寻找什么参数?

  • 我将geenrated jar文件添加到hdfs目录中,使用: 我尝试使用以下命令创建一个UDf: 但是我得到了如下错误: jar文件被成功地创建并添加到Hive,但它仍然显示没有找到那个类。谁能说出它出了什么问题吗?