[英]Hive UDF that uses Hive table
我在 java 中開發了一個可以正常工作的 hive udf,我的函數返回輸入和 hive 表中列之間的最佳匹配,所以它有這個簡化的偽代碼:
class myudf extends udf{
evaluate(Text input){
getNewHiveConnection(); //i want to replace this by getCurrentHiveUserConnetion();
executeHiveQuery(input);
return something;
}
我的問題是,如果這個函數是由 Hive 調用的,為什么我需要在我的代碼中連接到 Hive? 我可以使用使用我的功能的用戶所連接的當前連接嗎?
如果您想從查詢中的整個列返回最接近的匹配項,您可以將其視為某種聚合並使用 Hive UDAF: https ://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy
還有非常方便的教程: http : //beekeeperdata.com/posts/hadoop/2015/08/17/hive-udaf-tutorial.html
另一種方法是創建宏。 他們在 Hive 和 Beeline 上都工作。
CREATE TEMPORARY MACRO fn_maskNull(input decimal(25,3))
CASE
WHEN input IS NULL THEN 0 else input
END;
-- usage
select fn_maskNull(null), fn_maskNull(101);
更多信息 :
https://medium.com/@gchandra/create-user-defined-functions-in-hive-beeline-ff965285d735
是的 - 您可以使 UDF 永久化。 例如:
CREATE FUNCTION MatchFinder as 'com.mycompany.packagex.myudf' using jar 'hdfs:///an_HDFS_directory/my_jar_name.jar';
這將使您的功能永久化,任何人都可以調用它。 在這種情況下,jar 文件存儲在 HDFS 上以方便訪問,但還有其他選項。
有關更多詳細信息,請參閱Hive wiki 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.