Bu default udfs are marked deterministic if you are giving a determini as tic udf no args or constant args the query planner might only calculate the value once. See the udftype annotation class.
On Monday, September 30, 2013, Yang <teddyyyy...@gmail.com> wrote: > ok.... I found the reason, as I modified the jar file, though I re-ran "ADD .....MyUdf.jar; create temporary function ....; ", it doesn't take effect. I have to get out of hive session, then rerun these again. > > On Mon, Sep 30, 2013 at 1:47 PM, Yang <teddyyyy...@gmail.com> wrote: >> >> I wrote a super simple UDF, but got some errors: >> UDF: >> package yy; >> import org.apache.hadoop.hive.ql.exec.UDF; >> import java.util.Random; >> import java.util.UUID; >> import java.lang.management.*; >> public class MyUdf extends UDF { >> static Random rand = new Random(System.currentTimeMillis() + Thread.currentThread().getId()* 1000000); >> String name = ManagementFactory.getRuntimeMXBean().getName(); >> long startValue = Long.valueOf(name.replaceAll("[^\\d]+", "")) * 10000 + Thread.currentThread().getId() * 1000; >> public long evaluate(long x ) { >> //return (long)UUID.randomUUID().hashCode(); >> //return rand.nextLong(); >> return startValue++; >> } >> } >> >> >> >> >> sql script: >> CREATE TEMPORARY FUNCTION gen_uniq2 AS 'yy.MyUdf'; >> select gen_uniq2(field1), field2 >> from yy_mapping limit 10; >> field1 is bigint, field2 is int >> >> >> >> >> error: >> hive> source aa.sql; >> Added ./MyUdf.jar to class path >> Added resource: ./MyUdf.jar >> OK >> Time taken: 0.0070 seconds >> FAILED: SemanticException [Error 10014]: Line 2:7 Wrong arguments 'field1': No matching method for class yy.MyUdf with (bigint). Possible choices: _FUNC_() >> >> >> >> >> so I'm declaring a UDF with arg of long, so that should work for a bigint (more importantly it's complaining not long vs bigint, but bigint vs void ). I tried changing both to int, same failure >> >> thanks! >> yang >> > >