@@ -68,7 +68,8 @@ class UserDefinedFunction(object):
6868 """
6969 def __init__ (self , func ,
7070 returnType = StringType (), name = None ,
71- evalType = PythonEvalType .SQL_BATCHED_UDF ):
71+ evalType = PythonEvalType .SQL_BATCHED_UDF ,
72+ deterministic = True ):
7273 if not callable (func ):
7374 raise TypeError (
7475 "Invalid function: not a function or callable (__call__ is not defined): "
@@ -92,7 +93,7 @@ def __init__(self, func,
9293 func .__name__ if hasattr (func , '__name__' )
9394 else func .__class__ .__name__ )
9495 self .evalType = evalType
95- self ._deterministic = True
96+ self .deterministic = deterministic
9697
9798 @property
9899 def returnType (self ):
@@ -130,7 +131,7 @@ def _create_judf(self):
130131 wrapped_func = _wrap_function (sc , self .func , self .returnType )
131132 jdt = spark ._jsparkSession .parseDataType (self .returnType .json ())
132133 judf = sc ._jvm .org .apache .spark .sql .execution .python .UserDefinedPythonFunction (
133- self ._name , wrapped_func , jdt , self .evalType , self ._deterministic )
134+ self ._name , wrapped_func , jdt , self .evalType , self .deterministic )
134135 return judf
135136
136137 def __call__ (self , * cols ):
@@ -162,8 +163,8 @@ def wrapper(*args):
162163 wrapper .func = self .func
163164 wrapper .returnType = self .returnType
164165 wrapper .evalType = self .evalType
166+ wrapper .deterministic = self .deterministic
165167 wrapper .asNondeterministic = self .asNondeterministic
166- wrapper ._deterministic = self ._deterministic
167168
168169 return wrapper
169170
@@ -173,5 +174,5 @@ def asNondeterministic(self):
173174
174175 .. versionadded:: 2.3
175176 """
176- self ._deterministic = False
177- return self
177+ self .deterministic = False
178+ return self . _wrapped ()
0 commit comments