Aller au contenu principal

registerJavaFunction (UDFRegistration)

Enregistre une fonction définie par l'utilisateur Java en tant que fonction SQL.

En plus d'un nom et de la fonction elle-même, le type de retour peut être spécifié en option. Lorsque le type de retour n'est pas spécifié, il est déduit par réflexion.

Syntaxe​

registerJavaFunction(name, javaClassName, returnType=None)

parameter​

parameter

Type

Description

name

str

Nom de la fonction définie par l'utilisateur.

javaClassName

str

Nom entièrement qualifié de la classe Java.

returnType

Type de données ou str, facultatif

Le type de renvoi de la fonction Java enregistrée. La valeur peut être un objet DataType ou une chaîne de type au format DDL.

parameter

Type

Description

name

str

Nom de la fonction définie par l'utilisateur.

javaClassName

str

Nom entièrement qualifié de la classe Java.

returnType

Type de données ou str, facultatif

Le type de renvoi de la fonction Java enregistrée. La valeur peut être un objet DataType ou une chaîne de type au format DDL.

Renvoie​

None

Notes​

Utilisez spark.udf.register dans une cellule de notebook Scala pour enregistrer une UDF Scala ; elle sera accessible depuis Python dans la même session.

Exemples​

Enregistrez-vous avec un type de retour DataType explicite.

Python
from pyspark.sql.types import IntegerType
spark.udf.registerJavaFunction(
"javaStringLength", "test.org.apache.spark.sql.JavaStringLength", IntegerType())
spark.sql("SELECT javaStringLength('test')").collect()
# [Row(javaStringLength(test)=4)]

Enregistrer sans spécifier de type de retour (déduit par réflexion).

Python
spark.udf.registerJavaFunction(
"javaStringLength2", "test.org.apache.spark.sql.JavaStringLength")
spark.sql("SELECT javaStringLength2('test')").collect()
# [Row(javaStringLength2(test)=4)]

Enregistrez-vous avec une chaîne de type de retour au format DDL.

Python
spark.udf.registerJavaFunction(
"javaStringLength3", "test.org.apache.spark.sql.JavaStringLength", "integer")
spark.sql("SELECT javaStringLength3('test')").collect()
# [Row(javaStringLength3(test)=4)]