Impossible de trouver le col de la fonction dans pyspark
Dans pyspark 1.6.2, je peux importer col
fonction par
from pyspark.sql.functions import col
mais quand j'ai essayer de regarder dans l' Github le code source je trouve pas col
fonction dans functions.py
fichier, comment peut-python importer une fonction qui n'existe pas?
Vous devez vous connecter pour publier un commentaire.
Il existe. Il n'est pas explicitement défini. Les fonctions exportées à partir de
pyspark.sql.functions
sont minces wrappers autour de la JVM code et, avec quelques exceptions qui nécessitent un traitement spécial, sont générés automatiquement à l'aide de méthodes d'assistance.Si vous vérifiez soigneusement la source vous trouverez des
col
répertorié parmi d'autres_functions
. Ce dictionnaire est en outre réitéré et_create_function
est utilisé pour générer des wrappers. Chaque produit de la fonction est directement affecté à un nom correspondant dans laglobals
.Enfin
__all__
, qui définit une liste d'éléments exportés à partir du module, juste des exportations de tous lesglobals
à l'exclusion de ceux figurant dans la liste noire.Si cela mécanismes est toujours pas clair, vous pouvez créer un jouet exemple:
Créer Python module appelé
foo.py
avec un contenu suivant:Le placer quelque part sur le Python path (par exemple dans le répertoire de travail).
Importation
foo
:Un effet secondaire non désiré de ces métaprogrammation approche est que les fonctions définies peut ne pas être reconnu par les outils en fonction uniquement sur l'analyse statique de code. Ce n'est pas un problème critique et peut être ignoré en toute sécurité pendant le processus de développement.
Selon l'IDE de l'installation de les annotations de type pourrait résoudre le problème.
De VS Code 1.26.1 cela peut être résolu en modifiant
python.linting.pylintArgs
réglage:Cette question a été expliqué sur github: https://github.com/DonJayamanne/pythonVSCode/issues/1418#issuecomment-411506443
J'ai rencontré un problème similaire essayer de mettre en place un PySpark environnement de développement avec Eclipse et PyDev. PySpark utilise une dynamique de l'espace de noms. Pour le faire fonctionner, j'ai besoin d'ajouter PySpark à force de "objets internes" comme ci-dessous.