Je travaille dans Ubuntu 15.10 avec le conteneur Docker pour Pyspark jupyter/pyspark-notebook . J'ai besoin d'installer folium avec toutes ses dépendances et d'exécuter un script Pyspark dans le conteneur. J'ai réussi à installer Docker, à extraire l'image et à l'exécuter avec la commande
docker run -d -p 8888:8888 -p 4040:4040 -v /home/$MYUSER/$MYPROJECT:/home/jovyan/work jupyter/pyspark-notebook
Ensuite, j'exécute l'exemple de code sans aucun problème
import pyspark
sc = pyspark.SparkContext('local[*]')
# do something to prove it works
rdd = sc.parallelize(range(1000))
rdd.takeSample(False, 5)
J'ai cherché l'environnement conda dans /opt/conda
(comme il est dit dans le documentation ) mais il n'y a pas de conda dans mon /opt
dossier. Ensuite, j'ai installé miniconda3 et folium avec toutes les dépendances comme un Python normal (pas Docker impliqué).
Ça ne marche pas. Lorsque j'exécute l'image et essaie d'importer le package avec import folium
il ne trouve pas le paquet folium:
ImportErrorTraceback (most recent call last)
<ipython-input-1-af6e4f19ef00> in <module>()
----> 1 import folium
ImportError: No module named 'folium'
Le problème peut donc être réduit à deux questions:
Pour répondre à la première question Où est l'environnement conda? il suffit d'exécuter dans la console $ docker my_containers_name ls /opt/conda
.
La deuxième question a deux options:
Nous pouvons ouvrir la console des conteneurs en exécutant la commande
$ docker exec -it my_containers_name /bin/bash
et installez le package comme un package conda normal
conda install --channel https://conda.anaconda.org/conda-forge folium
Nous pouvons modifier le Dockerfile de l'image Docker ou en créer un nouveau en prolongeant la précédente. Pour créer un nouveau Dockerfile et ajouter les lignes
FROM jupyter/minimal-notebook
USER jovyan
RUN conda install --quiet --yes --channel https://conda.anaconda.org/conda-forge folium && conda clean -tipsy
Et construisons notre nouvelle image. Si nous voulons modifier le Dockerfile d'origine, nous devons sauter la première ligne.
Je crée mon propre Dockerfile en forçant le projet d'origine .
Merci warmoverflow et ShanShan pour vos commentaires