Thanks Roberto. Will try that out. regards Sunita
On Thu, Jan 30, 2014 at 10:14 AM, Roberto Congiu <roberto.con...@openx.com>wrote: > Hi Sunita, > yes, it's definitely possible and you should use Generic UDFs. > I wrote one UDF that takes n arrays (each one with the same number of > elements) and returns an array of structs which is usually used in a > lateral view. > > A good article on how to write a generic UDF is this one: > http://www.baynote.com/2012/11/a-word-from-the-engineers/ > > > On Thu, Jan 30, 2014 at 7:06 AM, Sunita Arvind <sunitarv...@gmail.com>wrote: > >> Can someone please suggest if this is doable or not? Is generic udf the >> only option? How would using generic vs simple udf make any difference >> since I would be returning the same object either ways. >> >> Thank you >> Sunita >> >> ---------- Forwarded message ---------- >> From: *Sunita Arvind* <sunitarv...@gmail.com> >> Date: Wednesday, January 29, 2014 >> Subject: Simple UDF to return array >> To: "user@hive.apache.org" <user@hive.apache.org> >> >> >> Hello Experts, >> >> I am trying to write a UDF to parse a logline and provide the output in >> the form of an array. Basically I want to be able to use LATERAL VIEW >> explode subsequently to make it into columns. >> >> This is how a typical log entry looks: >> >> 24-JUN-2012 05:00:42 * >> (CONNECT_DATA=(SERVICE_NAME=abcd.efg.hij.com)(failover_mode=(type=select)(method=basic))(CID=(PROGRAM=sqlplus)(HOST=xyz)(USER=u1))(SERVER=dedicated)(INSTANCE_NAME=aaa)) >> * (ADDRESS=(PROTOCOL=tcp)(HOST=9.9.9.9)(PORT=60000)) * establish * >> abcd.efg.hij.com * 0 >> >> Attached is my LogParser class which is basically the UDF. Excerpts below: >> >> class LogParser extends UDF { >> int current_index=0; >> >> ArrayList<String> record= new ArrayList<>(); >> public ArrayList<String> evaluate(Text input) { >> ...... >> String logdate = null; >> ... >> logdate = getDate(line); >> record.add(logdate); >> return record; >> >> >> I've tried changing the return type to ArrayList<Text>, Object etc.I just >> get an error like this when I try to use the UDF: >> >> select explode(strparse(record)) as newcols from logdump limit 1; >> >> OK converting to local hdfs://tlbd-ns/user/TestUser1/LogParserStrArr.jar >> Added >> /tmp/3c583384-0592-41a3-ad9e-b12d2207df7b_resources/LogParserStrArr.jar to >> class path Added resource: >> /tmp/3c583384-0592-41a3-ad9e-b12d2207df7b_resources/LogParserStrArr.jar OK >> FAILED: UDFArgumentException explode() takes an array or a map as a >> parameter >> >> I tried cast to array and that fails as well. >> >> Requesting help from the community. I am considering writing generic UDF, >> but this is a simple requirement and would like to be able to use simple >> UDF if I can. >> >> regards >> Sunita >> >> >> > > > -- > ---------------------------------------------------------- > Good judgement comes with experience. > Experience comes with bad judgement. > ---------------------------------------------------------- > Roberto Congiu - Data Engineer - OpenX > tel: +1 626 466 1141 >