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)]