findspark python apache-spark pyspark

findspark python



ImportaciĆ³n de pyspark en shell python (16)

Esta es una copia de la pregunta de otra persona en otro foro que nunca fue respondida, así que pensé en volver a preguntar aquí, ya que tengo el mismo problema. (Ver http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

Tengo Spark instalado correctamente en mi máquina y puedo ejecutar programas de Python con los módulos de pyspark sin error cuando uso ./bin/pyspark como mi intérprete de Python.

Sin embargo, cuando intento ejecutar el shell de Python normal, cuando intento importar módulos de pyspark obtengo este error:

from pyspark import SparkContext

y dice

"No module named pyspark".

¿Cómo puedo arreglar esto? ¿Hay alguna variable de entorno que deba establecer para apuntar Python a los encabezados / bibliotecas / pyspark / etc.? Si mi instalación de chispa es / spark /, ¿qué rutas de Pyspark necesito incluir? ¿O pueden los programas de pyspark solo ejecutarse desde el intérprete de pyspark?


Al exportar la ruta SPARK y la ruta Py4j, comenzó a funcionar:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1 export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

Por lo tanto, si no desea escribir estos cada vez que desea iniciar el shell de Python, es posible que desee agregarlo a su archivo .bashrc


Aquí hay un método simple (¡Si no te molesta cómo funciona!)

Usa el findspark

  1. Ve a tu caparazón de pitón

    pip install findspark import findspark findspark.init()

  2. importar los módulos necesarios

    from pyspark import SparkContext from pyspark import SparkConf

  3. ¡¡¡Hecho!!!


En Mac, uso Homebrew para instalar Spark (fórmula "apache-spark"). Luego, configuro PYTHONPATH de esta manera para que funcione la importación de Python:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0 export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH

Reemplace el "1.2.0" con la versión actual apache-spark en su mac.


En Windows 10, lo siguiente funcionó para mí. Agregué las siguientes variables de entorno usando Configuraciones > Editar variables de entorno para su cuenta :

SPARK_HOME=C:/Programming/spark-2.0.1-bin-hadoop2.7 PYTHONPATH=%SPARK_HOME%/python;%PYTHONPATH%

(cambie "C: / Programming / ..." a la carpeta en la que ha instalado la chispa)


En el caso de DSE (DataStax Cassandra & Spark), se debe agregar la siguiente ubicación a PYTHONPATH

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH

Luego use dse pyspark para obtener los módulos en la ruta.

dse pyspark


Estoy ejecutando un clúster de chispa en CentOS VM, que se instala desde los paquetes cloudera yum.

Tuvo que establecer las siguientes variables para ejecutar pyspark.

export SPARK_HOME=/usr/lib/spark; export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH


No ejecute su archivo py como: python filename.py en su lugar use: spark-submit filename.py


Obtuve este error porque el script de Python que estaba tratando de enviar se llamaba pyspark.py ( facepalm ). La solución fue establecer mi PYTHONPATH como se recomienda arriba, luego cambiar el nombre del script a pyspark_test.py y limpiar el pyspark.pyc que se creó en base al nombre original de mi scripts y que borró este error.


Para deshacerse de ImportError: No module named py4j.java_gateway , debe agregar las siguientes líneas:

import os import sys os.environ[''SPARK_HOME''] = "D:/python/spark-1.4.1-bin-hadoop2.4" sys.path.append("D:/python/spark-1.4.1-bin-hadoop2.4/python") sys.path.append("D:/python/spark-1.4.1-bin-hadoop2.4/python/lib/py4j-0.8.2.1-src.zip") try: from pyspark import SparkContext from pyspark import SparkConf print ("success") except ImportError as e: print ("error importing spark modules", e) sys.exit(1)


Para una ejecución Spark en pyspark se requieren dos componentes para trabajar juntos:

  • paquete pyspark python
  • Instancia de chispa en una JVM

Al lanzar cosas con spark-submit o pyspark, estos scripts se encargarán de ambos, es decir, configurarán su PYTHONPATH, PATH, etc., para que su script pueda encontrar pyspark, y también comiencen la instancia de chispa, configurándose de acuerdo con sus params. , por ejemplo, --master X

Alternativamente, es posible omitir estos scripts y ejecutar su aplicación de chispa directamente en el intérprete de python myscript.py como python myscript.py . Esto es especialmente interesante cuando los scripts de chispa comienzan a ser más complejos y eventualmente reciben sus propios argumentos.

  1. Asegúrese de que el intérprete de Python pueda encontrar el paquete pyspark. Como ya se discutió, agregue el directorio spark / python a PYTHONPATH o directamente instale pyspark usando pip install.
  2. Establezca los parámetros de instancia de chispa de su secuencia de comandos (los que solían pasar a pyspark).
    • Para las configuraciones de chispa que normalmente se configuran con --conf se definen con un objeto de configuración (o configuraciones de cadena) en SparkSession.builder.config
    • Para las opciones principales (como --master, o --driver-mem) por el momento puede configurarlas escribiendo a la variable de entorno PYSPARK_SUBMIT_ARGS. Para hacer que las cosas estén más limpias y seguras, puedes configurarlas desde dentro de Python, y la chispa lo leerá al comenzar.
  3. Inicie la instancia, que solo requiere que llame a getOrCreate() desde el objeto del generador.

Tu script puede tener algo como esto:

from pyspark.sql import SparkSession if __name__ == "__main__": if spark_main_opts: # Set main options, e.g. "--master local[4]" os.environ[''PYSPARK_SUBMIT_ARGS''] = spark_main_opts + " pyspark-shell" # Set spark config spark = (SparkSession.builder .config("spark.checkpoint.compress", True) .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11") .getOrCreate())


Para usuarios de Linux, la siguiente es la forma correcta (y no codificada) de incluir el pyspark libaray en PYTHONPATH. Ambas partes de PATH son necesarias:

  1. La ruta al módulo pyspark Python en sí, y
  2. La ruta a la biblioteca comprimida en la que se basa ese módulo de pyspark cuando se importa

Observe a continuación que la versión comprimida de la biblioteca está determinada dinámicamente, por lo que no la codificamos.

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}


Resulta que el contenedor de pyspark está CARGANDO python y cargando automáticamente las rutas correctas de la biblioteca. Consulte $ SPARK_HOME / bin / pyspark:

# Add the PySpark classes to the Python path: export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

¡Agregué esta línea a mi archivo .bashrc y ahora los módulos se encuentran correctamente!


Si imprime tal error:

ImportError: ningún módulo llamado py4j.java_gateway

Agregue $ SPARK_HOME / python / build a PYTHONPATH:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4 export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH


Tuve el mismo problema y agregaría una cosa a las soluciones propuestas anteriormente. Cuando utilice Homebrew en Mac OS X para instalar Spark, deberá corregir la dirección de la ruta py4j para incluir libexec en la ruta (recordando cambiar la versión de py4j por la que tiene);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH


Yo tuve el mismo problema.

También asegúrese de estar utilizando la versión de python correcta y la está instalando con la versión de pip correcta. en mi caso: tenía tanto Python 2.7 como 3.x. He instalado pyspark con

pip2.7 install pyspark

Y funcionó.


export PYSPARK_PYTHON=/home/user/anaconda3/bin/python export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS=''notebook''

Esto es lo que hice al usar mi distribución de Anaconda con Spark. Esta es la versión Spark independiente. Puedes cambiar la primera línea a la bandeja de pitones de tus usuarios. Además, a partir de Spark 2.2.0, PySpark está disponible como paquete independiente en PyPi, pero todavía no lo he probado.