code: def registerJavaFunction(self, name, javaClassName, returnType=None):
          
  
          jdt = None
          if returnType is not None:
              if not isinstance(returnType, DataType):
                  returnType = _parse_datatype_string(returnType)
              jdt = self.sparkSession._jsparkSession.parseDataType(returnType.json())
          self.sparkSession._jsparkSession.udf().registerJava(name, javaClassName, jdt)
docs: Register a Java user-defined function as a SQL function.
  
          In addition to a name and the function itself, the return type can be optionally specified.
          When the return type is not specified we would infer it via reflection.
  
          :param name: name of the user-defined function
          :param javaClassName: fully qualified name of java class
          :param returnType: the return type of the registered Java function. The value can be either
              a :class:`pyspark.sql.types.DataType` object or a DDL-formatted type string.
  
          >>> from pyspark.sql.types import IntegerType
          >>> spark.udf.registerJavaFunction(
          ...     "javaStringLength", "test.org.apache.spark.sql.JavaStringLength", IntegerType())
          >>> spark.sql("SELECT javaStringLength('test')").collect()
          [Row(UDF:javaStringLength(test)=4)]
  
          >>> spark.udf.registerJavaFunction(
          ...     "javaStringLength2", "test.org.apache.spark.sql.JavaStringLength")
          >>> spark.sql("SELECT javaStringLength2('test')").collect()
          [Row(UDF:javaStringLength2(test)=4)]
  
          >>> spark.udf.registerJavaFunction(
          ...     "javaStringLength3", "test.org.apache.spark.sql.JavaStringLength", "integer")
          >>> spark.sql("SELECT javaStringLength3('test')").collect()
          [Row(UDF:javaStringLength3(test)=4)]