2015-10-27 10 views
7

मैं जावा कि ठीक से काम करता में एक छत्ता यूडीएफ का विकास किया है, मेरे समारोह इनपुट और एक छत्ता तालिका में किसी स्तंभ के बीच सबसे अच्छा मैच लौटने के लिए, तो यह इस सरलीकृत छद्म कोड है:हाइव यूडीएफ का उपयोग हाइव तालिका

class myudf extends udf{ 

    evaluate(Text input){ 

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

मेरा सवाल है, अगर यह फ़ंक्शन हाइव द्वारा लगाया जाता है, तो मुझे अपने कोड में हाइव से कनेक्ट करने की आवश्यकता क्यों है? क्या मैं वर्तमान कनेक्शन का उपयोग कर सकता हूं जो उपयोगकर्ता मेरे फ़ंक्शन का उपयोग करता है?

उत्तर

-2

हां - आप यूडीएफ स्थायी बना सकते हैं। उदाहरण के लिए:

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

यह आपके कार्य को स्थायी बनाएगा और कोई भी इसे कॉल करने में सक्षम होगा। इस मामले में, आसान पहुंच के लिए जार फ़ाइल एचडीएफएस पर संग्रहीत है, लेकिन अन्य विकल्प भी हैं।

अधिक जानकारी के लिए Hive wiki देखें।

+0

यह वह नहीं है जिसे मैं ढूंढ रहा हूं, मैं उस उपयोगकर्ता द्वारा उपयोग किए जाने वाले मौजूदा कनेक्शन का उपयोग करना चाहता हूं जो नए कनेक्शन बनाने के बजाय, मेरे यूडीएफ का आह्वान करता है, बस इसे तेज़ बनाने के लिए। – 54l3d

0

आप किसी क्वेरी में संपूर्ण स्तंभ से एक करीबी मिलान लौटना चाहते हैं, तो आप एकत्रीकरण के कुछ प्रकार के रूप में अगर यह लगता है और हाइव UDAF इस्तेमाल कर सकते हैं: http://beekeeperdata.com/posts/hadoop/2015/08/17/hive-udaf-tutorial.html

: https://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy

वहाँ भी काफी आसान ट्यूटोरियल है