我正在尝试在UDF
中创建Hive
。此UDF
必须自动增加名为hive
的{{1}}表格列。
现在,以下是id
代码,用于创建Java
。
UDF
现在我可以创建一个jar文件并将jar文件添加到hive中,如下所示:
package myudf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.udf.UDFType;
@UDFType(deterministic = false, stateful = true)
public class autoincrement extends UDF{
int lastValue;
public int evaluate() {
lastValue++;
return lastValue;
}
}
然后创建一个临时函数
add jar /home/cloudera/Desktop/increment.jar;
创建如下表格。
create temporary function inc as 'myudf.autoincrement';
插入值:
Create table abc(id int, name string)
选择陈述:
INSERT into TABLE abc SELECT inc() as id, 'Tim';
输出:
select * from abc;
插入值:
1 Tim
选择陈述:
INSERT into TABLE abc SELECT inc() as id, 'John';
输出:
select * from abc
但我期待的是第二次插入值时。
我的预期输出是:
1 Tim
1 John
如何获得预期的输出。我应该在1 Tim
2 John
代码中更改哪些内容才能获得所需的结果?
我可以在Java
中使用相同的功能吗
当我做火花时
Spark
它显示了sqlContext.sql("show functions")
但是当我做的时候
Hive
我收到以下错误
sqlContext.sql("INSERT into TABLE abc SELECT inc() as id, 'Jim'")
如何在pyspark.sql.utils.AnalysisException: u'undefined function inc; line 1 pos 29'
中创建相同的UDF
并获得所需的输出
同时执行insert语句会发生什么?
答案 0 :(得分:1)
按照以下步骤
你必须在我检查过的时候在hive中尝试SQL的正确性,它在MYSQL中工作。