Je travaille dans Pyspark avec une fonction lambda comme les suivantes:Les variables globales non reconnues dans les fonctions lambda dans Pyspark
udf_func = UserDefinedFunction(lambda value: method1(value, dict_global), IntegerType())
result_col = udf_func(df[atr1])
La mise en œuvre de la method1 est la suivante:
def method1(value, dict_global):
result = len(dict_global)
if (value in dict_global):
result = dict_global[value]
return result
' dict_global 'est un dictionnaire global qui contient des valeurs.
Le problème est que lorsque j'exécute la fonction lambda, le résultat est toujours None. Pour quelque raison que ce soit, la fonction 'method1' n'interprète pas la variable 'dict_global' comme une variable externe. Pourquoi? "Que pouvais-je faire?"
Eh bien, 'method1' interprète' dict_global' comme un argument de fonction. La question est, où est la fonction 'lambda' à la recherche de' dict_global'? Tant qu'elle n'est pas masquée par une définition locale, la fonction 'lambda' devrait alors la rechercher dans le contexte global dans lequel' lambda' a été défini. –
Je passe le dictionnaire en paramètre parce que quand j'ai essayé le même sans passer le dict comme paramètre j'obtiens le même résultat ... 'Aucun' – jartymcfly
Si vous le passez comme argument, vous devriez le réécrire 'udf_func = lambda dict_global: UserDefinedFunction (valeur lambda: méthode1 (valeur, dict_global), IntegerType()) ' ' result_col = udf_func (dict_global) (df [atr1]) ' – MaFF