2015-10-27 2 views
7

Я разработал улья UDF в Java, которая работает правильно, моя функция возвращает наилучшее соответствие между входом и столбца в улей таблице, так что есть этот упрощенный псевдо-код:Hive UDF, которые используют улей таблицу

class myudf extends udf{ 

    evaluate(Text input){ 

     getNewHiveConnection(); //i want to replace this by getCurrentHiveUserConnetion(); 
     executeHiveQuery(input); 
     return something; 
} 

Мой вопрос: если эта функция вызывается Hive, почему мне нужно подключиться к улью в моем коде? могу ли я использовать текущее соединение, к которому подключен пользователь, который использует мою функцию?

ответ

-2

Да - вы можете сделать UDF постоянным. Например:

CREATE FUNCTION MatchFinder as 'com.mycompany.packagex.myudf' using jar  'hdfs:///an_HDFS_directory/my_jar_name.jar'; 

Это сделает вашу функцию постоянной, и любой сможет ее назвать. В этом случае файл jar хранится на HDFS для удобства доступа, но есть другие варианты.

Для получения более подробной информации см. Hive wiki.

+0

Это не то, что я ищу, я хочу использовать текущее соединение, используемое пользователем, который вызывает мой udf, вместо создания нового соединения, чтобы ускорить его. – 54l3d

0

Если вы хотите вернуть ближайший матч из всего столбца в запросе, вы могли бы подумать, если он в какой-то агрегации и использовать улей UDAF: https://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy

Там также довольно удобный учебник: http://beekeeperdata.com/posts/hadoop/2015/08/17/hive-udaf-tutorial.html

Смежные вопросы