Not sure what your udf is exactly doing, but why not on udf / type ? You avoid 
issues converting it, it is more obvious for the user of your udf etc
You could of course return a complex type with one long, one string and one 
double and you fill them in the udf as needed, but this would be probably not a 
clean solution...

> On 2 Feb 2017, at 22:05, Jean Georges Perrin <j...@jgp.net> wrote:
> 
> Hi fellow Sparkans,
> 
> I am building a UDF (in Java) that can return various data types, basically 
> the signature of the function itself is:
> 
>       public Object call(String a, Object b, String c, Object d, String e) 
> throws Exception
> 
> When I register my function, I need to provide a type, e.g.:
> 
>       spark.udf().register("f2", new Udf5(), DataTypes.LongType);
> 
> In my test it is a long now, but can become a string or a float. Of course, I 
> do not know the expected return type before I call the function, which I call 
> like:
> 
>       df = df.selectExpr("*", "f2('x1', x, 'c2', y, 'op') as op");
> 
> Is there a way to have an Object being returned from a UDF and to store an 
> Object in a Dataset/dataframe? I don't need to know the datatype at that 
> point and can leave it hanging for now? Or should I play it safe and always 
> return a DataTypes.StringType (and then try to transform it if needed)?
> 
> I hope I am clear enough :).
> 
> Thanks for any tip/idea/comment...
> 
> jg

Reply via email to