Comment puis-je envoyer des modules C compilés (par exemple, python-Levenshtein) à chaque nœud d'un cluster Spark ?
Je sais que je peux livrer des fichiers Python dans Spark à l'aide d'un script Python autonome (exemple de code ci-dessous):
from pyspark import SparkContext
sc = SparkContext("local", "App Name", pyFiles=['MyFile.py', 'MyOtherFile.py'])
Mais dans les cas où il n’existe pas de «.py», comment puis-je expédier le module?
Si vous pouvez conditionner votre module dans un fichier .Egg
ou .Zip
, vous devriez pouvoir le lister dans pyFiles
lors de la construction de votre SparkContext (ou vous pouvez l'ajouter ultérieurement via sc.addPyFile ).
Pour les bibliothèques Python qui utilisent setuptools, vous pouvez exécuter python setup.py bdist_Egg
pour créer une distribution Egg.
Une autre option consiste à installer la bibliothèque au niveau du cluster, soit en utilisant pip/easy_install sur chaque ordinateur, soit en partageant une installation Python sur un système de fichiers au niveau du cluster (comme NFS).
Il y a deux options principales ici:
.Zip
/.Egg
, transmettez-le à SparkContext.addPyFile
.pip install
dans un code d'amorçage pour les machines du cluster .Les gens suggèrent également en utilisant python Shell
pour vérifier si le module est présent sur le cluster .