importar pyspark en python shell


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

Tengo Spark instalado correctamente en mi máquina y soy capaz de ejecutar programas python con los módulos pyspark sin error al usar./ bin / pyspark como mi intérprete de python.

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

from pyspark import SparkContext

Y dice

"No module named pyspark".

¿Cómo puedo arreglar esto? ¿Hay una variable de entorno que deba establecer para que apunte Python a los encabezados/libraries/etc de pyspark?? Si mi instalación de spark es / spark/, ¿qué rutas de pyspark necesito incluir? ¿O los programas pyspark solo se pueden ejecutar desde el intérprete pyspark?

Author: PreethiS, 2014-04-24

16 answers

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

Use findspark

  1. Vaya a su shell de python

    pip install findspark import findspark findspark.init()

  2. Importa los módulos necesarios

    from pyspark import SparkContext from pyspark import SparkConf

  3. Hecho!!!

 65
Author: Suresh2692,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-03 06:19:04

Si imprime tal error:

ImportError: No module named py4j.java_gateway

Por favor agregue SPARK 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
 42
Author: Peng Zhang 1516540,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-05 09:23:01

Resulta que la papelera de pyspark está CARGANDO python y automáticamente cargando las rutas correctas de la biblioteca. Echa un vistazo a SPARK SPARK_HOME / bin / pyspark:

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

He añadido esta línea a mi .el archivo bashrc y los módulos ahora se encuentran correctamente!

 35
Author: Glenn Strycker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-09 14:51:24

Al exportar la ruta de 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 encender la shell de Python, es posible que desee agregarlo a su archivo .bashrc

 17
Author: Dawny33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-19 02:51:40

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

 15
Author: dodo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-22 04:33:55

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

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

Reemplace la "1.2.0" con la versión real de apache-spark en su mac.

 14
Author: jyu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-05 19:42:24

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

  • pyspark paquete python
  • Instancia de Spark en una JVM

Al iniciar cosas con spark-submit o pyspark, estos scripts se encargarán de ambos, es decir, configurarán tu PYTHONPATH, PATH, etc., para que tu script pueda encontrar pyspark, y también iniciarán la instancia de spark, configurando de acuerdo con tus parámetros, por ejemplo --master X

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

  1. Asegúrese de que el paquete pyspark pueda ser encontrado por el intérprete Python. Como ya se ha comentado, agregue el directorio spark/python a PYTHONPATH o instale pyspark directamente usando pip install.
  2. Establezca los parámetros de la instancia de spark desde su script (los que solían ser pasado a pyspark).
    • Para las configuraciones de spark como normalmente se establecería con --conf, se definen con un objeto config (o string configs) en SparkSession.constructor.config
    • Para las opciones principales (como --master, o driver driver-mem) por el momento puede configurarlas escribiendo en la variable de entorno PYSPARK_SUBMIT_ARGS. Para hacer las cosas más limpias y seguras, puedes configurarlo desde dentro de Python, y spark lo leerá al iniciar.
  3. Iniciar la instancia, que solo requiere que llame a getOrCreate() desde el objeto builder.

Por lo tanto, su 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())
 8
Author: F Pereira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 23:45:37

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)
 4
Author: Karang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-12 01:15:03

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

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

(cambiar "C:\Programming\..."a la carpeta en la que ha instalado spark)

 4
Author: JustAC0der,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-08 13:41:25

Para los usuarios de Linux, la siguiente es la forma correcta (y no codificada) de incluir el pyspark libaray en PYTHONPATH. Ambas partes del CAMINO 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 el módulo pyspark cuando se importa

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

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}
 3
Author: prismalytics.io,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-30 21:51:52

Estoy ejecutando un clúster de spark, en CentOS VM, que se instala desde paquetes de 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
 2
Author: sujesh chirackkal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-24 09:02:00
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

Esto es lo que hice para usar mi distribución Anaconda con Spark. Esta es la versión independiente de Spark. Puede cambiar la primera línea a la papelera de python de sus usuarios. Además, a partir de Spark 2.2.0 PySpark está disponible como un paquete independiente en PyPI pero todavía tengo que probarlo.

 2
Author: Yayati Sule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-02 12:11:52

Yo tenía el mismo problema.

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

Pip2. 7 instalar pyspark

Y funcionó.

 2
Author: etinika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-09 11:04:35

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

 1
Author: Patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-09 14:42:20

Yo tenía este mismo problema y añadiría una cosa a las soluciones propuestas anteriormente. Al usar Homebrew en Mac OS X para instalar Spark, necesitará corregir la dirección de la ruta py4j para incluir libexec en la ruta (recordando cambiar la versión de py4j a la que tiene);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH
 1
Author: tjb305,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-05 16:11:24

En el caso de DSE (DataStax Cassandra & Spark) La siguiente ubicación debe agregarse a PYTHONPATH

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

Luego use el dse pyspark para obtener los módulos en path.

dse pyspark
 0
Author: Sreesankar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-11 15:05:13