He construido un módulo de python y quiero importar en mi pyspark aplicación.

Mi paquete de estructura de directorios es:

wesam/
|-- data.py
`-- __init__.py

Un simple import wesam en la parte superior de mi pyspark script conduce a ImportError: No module named wesam. También he probado a comprimir y enviar con mi código con --py-files como se recomienda en esta respuesta, sin suerte.

./bin/spark-submit --py-files wesam.zip mycode.py

También he añadido el archivo de programación como sugiere esta respuesta, pero tengo el mismo ImportError: No module named wesam error.

.sc.addPyFile("wesam.zip")

Lo que me estoy perdiendo aquí?

InformationsquelleAutor Wesam | 2017-04-21

2 Comentarios

  1. 40

    Resultó que ya le estoy enviando mi solicitud en el modo de cliente, a continuación, la máquina que me ejecute el spark-submit comando que se ejecutará el programa del controlador y se necesitan para acceder a los archivos del módulo.

    pyspark de importación definido por el usuario o módulo .archivos py

    He añadido mi módulo para la PYTHONPATH la variable de entorno en el nodo que le estoy enviando mi trabajo de añadir la siguiente línea a mi .bashrc archivo (o ejecutarlo antes de la presentación de mi trabajo).

    export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules

    Y que se solucionó el problema. Ya que el camino está en el controlador de nodo, no tengo que comprimir y enviar el módulo con --py-files o uso sc.addPyFile().

    La clave para resolver cualquier pyspark módulo de importación de error problema es la comprensión de si el conductor o el trabajador (o ambos) de los nodos de la necesidad de que el módulo de archivos.

    Importante
    Si el trabajador nodos necesitan de su módulo de archivos, entonces usted necesita para pasar como un archivo zip con la --py-files y este argumento debe preceder a su .py archivo como argumento. Por ejemplo, observe el orden de los argumentos en estos ejemplos:

    Esto es correcto:

    ./bin/spark-submit --py-files wesam.zip mycode.py

    este es no correcta:

    ./bin/spark-submit mycode.py --py-files wesam.zip
    • esto es muy explícito y útil. gracias!
    • Mientras que esto podría funcionar, son efectivamente disting su env a través de su (presumiblemente) a nivel mundial disted $HOME/.bashrc. Hay realmente ninguna manera de establecer dinámicamente el PYTHONPATH del trabajador módulos? La razón que usted desea hacer esto es que usted está interactuando a partir de la ipython REPL y quieren embarcar en paralelo puestos de trabajo que dependen de los módulos sentado en NFS en el PYTHONPATH (creo que python setup.py desarrollar modo).
    • Gran respuesta! Mencionar que «La clave para resolver cualquier pyspark módulo de importación de error problema es la comprensión de si el conductor o el trabajador (o ambos) de los nodos de la necesidad de que el módulo de archivos». — ¿Puede recomendar una buena manera de aprender esto?
    • su sugerencia para dividir una aplicación en pyspark. Digamos que tengo romper mi gran código en tres pyscripts. ¿cuál sería la mejor manera de ejecutar estos scripts? el uso de tres shell chispa y presentar para ejecutar las diferentes aplicaciones o correr todos juntos en una chispa de shell?
    • Esto funciona bien para mí, gracias. Yo era capaz de especificar un s3 ubicación a un único módulo.
  2. 3

    Poner mycode.py y wesam.py en la misma ubicación de ruta de acceso y tratar

    sc.addPyFile("wesam.py")

    Podría funcionar.

Dejar respuesta

Please enter your comment!
Please enter your name here