@@ -255,11 +255,25 @@ def registerFunction(self, name, f, returnType=StringType()):
255255 >>> _ = spark.udf.register("stringLengthInt", len, IntegerType())
256256 >>> spark.sql("SELECT stringLengthInt('test')").collect()
257257 [Row(stringLengthInt(test)=4)]
258+
259+ >>> import random
260+ >>> from pyspark.sql.functions import udf
261+ >>> from pyspark.sql.types import IntegerType, StringType
262+ >>> random_udf = udf(lambda: int(random.random() * 100), IntegerType()).asNondeterministic()
263+ >>> spark.catalog.registerFunction("random_udf", random_udf, StringType())
264+ >>> spark.sql("SELECT random_udf()").collect() # doctest: +SKIP
265+ [Row(random_udf()=u'82')]
258266 """
259- udf = UserDefinedFunction (f , returnType = returnType , name = name ,
260- evalType = PythonEvalType .SQL_BATCHED_UDF )
261- self ._jsparkSession .udf ().registerPython (name , udf ._judf )
262- return udf ._wrapped ()
267+
268+ if hasattr (f , 'asNondeterministic' ):
269+ udf = f ._set_name (name , returnType )
270+ self ._jsparkSession .udf ().registerPython (name , udf ._judf )
271+ return udf ._wrapped ()
272+ else :
273+ udf = UserDefinedFunction (f , returnType = returnType , name = name ,
274+ evalType = PythonEvalType .SQL_BATCHED_UDF )
275+ self ._jsparkSession .udf ().registerPython (name , udf ._judf )
276+ return udf ._wrapped ()
263277
264278 @since (2.0 )
265279 def isCached (self , tableName ):
0 commit comments