/// <summary> /// Register UDF with 2 input arguments, e.g: /// <see cref="SqlContext.RegisterFunction{bool, string, string}"/>("MyFilter", (arg1, arg2) => arg1 != null && arg2 != null); /// sqlContext.Sql("SELECT * FROM MyTable where MyFilter(columnName1, columnName2)"); /// </summary> /// <typeparam name="RT"></typeparam> /// <typeparam name="A1"></typeparam> /// <typeparam name="A2"></typeparam> /// <param name="name"></param> /// <param name="f"></param> public void RegisterFunction <RT, A1, A2>(string name, Func <A1, A2, RT> f) { Func <int, IEnumerable <dynamic>, IEnumerable <dynamic> > udfHelper = new UdfHelper <RT, A1, A2>(f).Execute; sqlContextProxy.RegisterFunction(name, SparkContext.BuildCommand(new CSharpWorkerFunc(udfHelper), SerializedMode.Row, SerializedMode.Row), Functions.GetReturnType(typeof(RT))); }