python - ¿Cómo vincular PyCharm con PySpark?
apache-spark homebrew (12)
La forma más sencilla es instalar PySpark a través del intérprete de proyectos.
- Ir a Archivo - Configuración - Proyecto - Intérprete de Proyecto
- Haga clic en el ícono + en la esquina superior derecha.
- Busque PySpark y otros paquetes que desea instalar
- Finalmente haga clic en instalar paquete
- ¡¡Está hecho!!
Soy nuevo con apache spark y aparentemente instalé apache-spark con homebrew en mi macbook:
Last login: Fri Jan 8 12:52:04 on console
user@MacBook-Pro-de-User-2:~$ pyspark
Python 2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Using Spark''s default log4j profile: org/apache/spark/log4j-defaults.properties
16/01/08 14:46:44 INFO SparkContext: Running Spark version 1.5.1
16/01/08 14:46:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/01/08 14:46:47 INFO SecurityManager: Changing view acls to: user
16/01/08 14:46:47 INFO SecurityManager: Changing modify acls to: user
16/01/08 14:46:47 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(user); users with modify permissions: Set(user)
16/01/08 14:46:50 INFO Slf4jLogger: Slf4jLogger started
16/01/08 14:46:50 INFO Remoting: Starting remoting
16/01/08 14:46:51 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:50199]
16/01/08 14:46:51 INFO Utils: Successfully started service ''sparkDriver'' on port 50199.
16/01/08 14:46:51 INFO SparkEnv: Registering MapOutputTracker
16/01/08 14:46:51 INFO SparkEnv: Registering BlockManagerMaster
16/01/08 14:46:51 INFO DiskBlockManager: Created local directory at /private/var/folders/5x/k7n54drn1csc7w0j7vchjnmc0000gn/T/blockmgr-769e6f91-f0e7-49f9-b45d-1b6382637c95
16/01/08 14:46:51 INFO MemoryStore: MemoryStore started with capacity 530.0 MB
16/01/08 14:46:52 INFO HttpFileServer: HTTP File server directory is /private/var/folders/5x/k7n54drn1csc7w0j7vchjnmc0000gn/T/spark-8e4749ea-9ae7-4137-a0e1-52e410a8e4c5/httpd-1adcd424-c8e9-4e54-a45a-a735ade00393
16/01/08 14:46:52 INFO HttpServer: Starting HTTP Server
16/01/08 14:46:52 INFO Utils: Successfully started service ''HTTP file server'' on port 50200.
16/01/08 14:46:52 INFO SparkEnv: Registering OutputCommitCoordinator
16/01/08 14:46:52 INFO Utils: Successfully started service ''SparkUI'' on port 4040.
16/01/08 14:46:52 INFO SparkUI: Started SparkUI at http://192.168.1.64:4040
16/01/08 14:46:53 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
16/01/08 14:46:53 INFO Executor: Starting executor ID driver on host localhost
16/01/08 14:46:53 INFO Utils: Successfully started service ''org.apache.spark.network.netty.NettyBlockTransferService'' on port 50201.
16/01/08 14:46:53 INFO NettyBlockTransferService: Server created on 50201
16/01/08 14:46:53 INFO BlockManagerMaster: Trying to register BlockManager
16/01/08 14:46:53 INFO BlockManagerMasterEndpoint: Registering block manager localhost:50201 with 530.0 MB RAM, BlockManagerId(driver, localhost, 50201)
16/01/08 14:46:53 INFO BlockManagerMaster: Registered BlockManager
Welcome to
____ __
/ __/__ ___ _____/ /__
_/ // _ // _ `/ __/ ''_/
/__ / .__//_,_/_/ /_//_/ version 1.5.1
/_/
Using Python version 2.7.10 (default, Jul 13 2015 12:05:58)
SparkContext available as sc, HiveContext available as sqlContext.
>>>
Me gustaría comenzar a jugar para aprender más sobre MLlib. Sin embargo, uso Pycharm para escribir scripts en python. El problema es: cuando voy a Pycharm e intento llamar a pyspark, Pycharm no puede encontrar el módulo. Intenté agregar la ruta a Pycharm de la siguiente manera:
Luego, desde un blog probé esto:
import os
import sys
# Path for spark source folder
os.environ[''SPARK_HOME'']="/Users/user/Apps/spark-1.5.2-bin-hadoop2.4"
# Append pyspark to Python Path
sys.path.append("/Users/user/Apps/spark-1.5.2-bin-hadoop2.4/python/pyspark")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
Y todavía no puede comenzar a usar PySpark con Pycharm, ¿alguna idea de cómo "vincular" PyCharm con apache-pyspark ?.
Actualizar:
Luego busco apache-spark y python path para establecer las variables de entorno de Pycharm:
camino apache-spark:
user@MacBook-Pro-User-2:~$ brew info apache-spark
apache-spark: stable 1.6.0, HEAD
Engine for large-scale data processing
https://spark.apache.org/
/usr/local/Cellar/apache-spark/1.5.1 (649 files, 302.9M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/apache-spark.rb
ruta de python:
user@MacBook-Pro-User-2:~$ brew info python
python: stable 2.7.11 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org
/usr/local/Cellar/python/2.7.10_2 (4,965 files, 66.9M) *
Luego, con la información anterior, intenté establecer las variables de entorno de la siguiente manera:
¿Alguna idea de cómo vincular correctamente Pycharm con pyspark?
Luego, cuando ejecuto un script de Python con la configuración anterior, tengo esta excepción:
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/user/PycharmProjects/spark_examples/test_1.py
Traceback (most recent call last):
File "/Users/user/PycharmProjects/spark_examples/test_1.py", line 1, in <module>
from pyspark import SparkContext
ImportError: No module named pyspark
ACTUALIZACIÓN: Luego probé estas configuraciones propuestas por @ zero323
Configuración 1:
/usr/local/Cellar/apache-spark/1.5.1/
fuera:
user@MacBook-Pro-de-User-2:/usr/local/Cellar/apache-spark/1.5.1$ ls
CHANGES.txt NOTICE libexec/
INSTALL_RECEIPT.json README.md
LICENSE bin/
Configuración 2:
/usr/local/Cellar/apache-spark/1.5.1/libexec
fuera:
user@MacBook-Pro-de-User-2:/usr/local/Cellar/apache-spark/1.5.1/libexec$ ls
R/ bin/ data/ examples/ python/
RELEASE conf/ ec2/ lib/ sbin/
Con el paquete PySpark (Spark 2.2.0 y posterior)
Con
SPARK-1267
fusionándose, debería poder simplificar el proceso instalando
pip
Spark en el entorno que utiliza para el desarrollo de PyCharm.
- Vaya a Archivo -> Configuración -> Intérprete de proyecto
-
Haga clic en el botón de instalación y busque PySpark
-
Haga clic en el botón instalar paquete.
Manualmente con la instalación de Spark proporcionada por el usuario
Crear configuración de ejecución :
- Vaya a Ejecutar -> Editar configuraciones
- Agregar nueva configuración de Python
- Establezca la ruta del script para que apunte al script que desea ejecutar
-
Editar campo de variables de entorno para que contenga al menos:
-
SPARK_HOME
: debe apuntar al directorio con la instalación de Spark. Debe contener directorios comobin
(conspark-submit
,spark-shell
, etc.) yconf
(conspark-defaults.conf
,spark-env.sh
, etc.) -
PYTHONPATH
: debe contener$SPARK_HOME/python
y, opcionalmente,$SPARK_HOME/python/lib/py4j-some-version.src.zip
si no está disponible de otra manera.some-version
debe coincidir con la versión Py4J utilizada por una instalación Spark dada (0.8.2.1 - 1.5, 0.9 - 1.6, 0.10.3 - 2.0, 0.10.4 - 2.1, 0.10.4 - 2.2, 0.10.6 - 2.3)
-
-
Aplicar la configuración
Agregue la biblioteca PySpark a la ruta del intérprete (requerida para completar el código) :
- Vaya a Archivo -> Configuración -> Intérprete de proyecto
- Abra la configuración para un intérprete que quiera usar con Spark
-
Edite rutas de intérprete para que contenga la ruta a
$SPARK_HOME/python
(un Py4J si es necesario) - Guarda la configuración
Opcionalmente
- Instale o agregue anotaciones de tipo de ruta que coincidan con la versión instalada de Spark para obtener una mejor terminación y detección de errores estáticos (Descargo de responsabilidad: soy un autor del proyecto).
Finalmente
Use la configuración recién creada para ejecutar su script.
Aquí está la configuración que funciona para mí (Win7 64bit, PyCharm2017.3CE)
Configurar Intellisense:
Haga clic en Archivo -> Configuración -> Proyecto: -> Intérprete de proyecto
Haga clic en el ícono de ajustes a la derecha del menú desplegable del intérprete de proyectos
Haga clic en Más ... en el menú contextual.
Elija el intérprete, luego haga clic en el icono "Mostrar rutas" (abajo a la derecha)
Haga clic en el ícono + para agregar las siguientes rutas:
/ python / lib / py4j-0.9-src.zip
/ bin / python / lib / pyspark.zip
Haga clic en Aceptar, Aceptar, Aceptar
Siga adelante y pruebe sus nuevas capacidades de inteligencia.
Así es como resolví esto en mac osx.
-
brew install apache-spark
-
Agregue esto a ~ / .bash_profile
export SPARK_VERSION=`ls /usr/local/Cellar/apache-spark/ | sort | tail -1` export SPARK_HOME="/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec" export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
-
Agregue pyspark y py4j a la raíz de contenido (use la versión correcta de Spark):
/usr/local/Cellar/apache-spark/1.6.1/libexec/python/lib/py4j-0.9-src.zip /usr/local/Cellar/apache-spark/1.6.1/libexec/python/lib/pyspark.zip
Configurar pyspark en pycharm (windows)
File menu - settings - project interpreter - (gearshape) - more - (treebelowfunnel) - (+) - [add python folder form spark installation and then py4j-*.zip] - click ok
Asegúrese de que SPARK_HOME esté configurado en el entorno de Windows, pycharm tomará desde allí. Para confirmar :
Run menu - edit configurations - environment variables - [...] - show
Opcionalmente, configure SPARK_CONF_DIR en variables de entorno.
De la documentation :
Para ejecutar aplicaciones Spark en Python, use el script bin / spark-submit ubicado en el directorio Spark. Este script cargará las bibliotecas Java / Scala de Spark y le permitirá enviar aplicaciones a un clúster. También puede usar bin / pyspark para iniciar un shell interactivo de Python.
Invoca su script directamente con el intérprete de CPython, lo que creo que está causando problemas.
Intenta ejecutar tu script con:
"${SPARK_HOME}"/bin/spark-submit test_1.py
Si eso funciona, debería ser capaz de hacerlo funcionar en PyCharm configurando el intérprete del proyecto para enviar por chispa.
Debe configurar PYTHONPATH, SPARK_HOME antes de iniciar IDE o Python.
Windows, edite variables de entorno, agregue spark python y py4j en
PYTHONPATH=%PYTHONPATH%;{py4j};{spark python}
Unix
export PYTHONPATH=${PYTHONPATH};{py4j};{spark/python}
La forma más fácil es
Vaya a la carpeta de paquetes del sitio de su instalación de anaconda / python, copie y pegue las carpetas pyspark y pyspark.egg-info allí.
Reinicie pycharm para actualizar el índice. Las dos carpetas mencionadas anteriormente están presentes en la carpeta spark / python de su instalación de spark. De esta manera, también obtendrá sugerencias de finalización de código de pycharm.
Los paquetes de sitio se pueden encontrar fácilmente en su instalación de Python. En anaconda está bajo anaconda / lib / pythonx.x / site-packages
Mira este video.
Suponga que su directorio de spark python es:
/home/user/spark/python
Suponga que su fuente Py4j es:
/home/user/spark/python/lib/py4j-0.9-src.zip
Básicamente, agrega el directorio spark python y el directorio py4j dentro de eso a las rutas del intérprete. No tengo suficiente reputación para publicar una captura de pantalla o lo haría.
En el video, el usuario crea un entorno virtual dentro de pycharm, sin embargo, puede crear el entorno virtual fuera de pycharm o activar un entorno virtual preexistente, luego iniciar pycharm con él y agregar esas rutas a las rutas de intérprete del entorno virtual desde dentro de pycharm.
Utilicé otros métodos para agregar chispa a través de las variables de entorno bash, que funciona muy bien fuera de pycharm, pero por alguna razón no fueron reconocidos dentro de pycharm, pero este método funcionó perfectamente.
Seguí los tutoriales en línea y agregué las variables env a .bashrc:
# add pyspark to python
export SPARK_HOME=/home/lolo/spark-1.6.1
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
Entonces acabo de obtener el valor en SPARK_HOME y PYTHONPATH para pycharm:
(srz-reco)lolo@K:~$ echo $SPARK_HOME
/home/lolo/spark-1.6.1
(srz-reco)lolo@K:~$ echo $PYTHONPATH
/home/lolo/spark-1.6.1/python/lib/py4j-0.9-src.zip:/home/lolo/spark-1.6.1/python/:/home/lolo/spark-1.6.1/python/lib/py4j-0.9-src.zip:/home/lolo/spark-1.6.1/python/:/python/lib/py4j-0.8.2.1-src.zip:/python/:
Luego lo copié en Ejecutar / Depurar configuraciones -> Variables de entorno del script.
Utilicé la siguiente página como referencia y pude obtener pyspark / Spark 1.6.1 (instalado a través de homebrew) importado en PyCharm 5.
http://renien.com/blog/accessing-pyspark-pycharm/
import os
import sys
# Path for spark source folder
os.environ[''SPARK_HOME'']="/usr/local/Cellar/apache-spark/1.6.1"
# Append pyspark to Python Path
sys.path.append("/usr/local/Cellar/apache-spark/1.6.1/libexec/python")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
Con lo anterior, pyspark se carga, pero recibo un error de puerta de enlace cuando intento crear un SparkContext. Hay algún problema con Spark de homebrew, por lo que acabo de obtener Spark del sitio web de Spark (descargue el precompilado para Hadoop 2.6 y posterior) y señale los directorios spark y py4j debajo de eso. ¡Aquí está el código en pycharm que funciona!
import os
import sys
# Path for spark source folder
os.environ[''SPARK_HOME'']="/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6"
# Need to Explicitly point to python3 if you are using Python 3.x
os.environ[''PYSPARK_PYTHON'']="/usr/local/Cellar/python3/3.5.1/bin/python3"
#You might need to enter your local IP
#os.environ[''SPARK_LOCAL_IP'']="192.168.2.138"
#Path for pyspark and py4j
sys.path.append("/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6/python")
sys.path.append("/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6/python/lib/py4j-0.9-src.zip")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
sc = SparkContext(''local'')
words = sc.parallelize(["scala","java","hadoop","spark","akka"])
print(words.count())
Recibí mucha ayuda de estas instrucciones, que me ayudaron a solucionar problemas en PyDev y luego hacerlo funcionar PyCharm - https://enahwe.wordpress.com/2015/11/25/how-to-configure-eclipse-for-developing-with-python-and-spark-on-hadoop/
Estoy seguro de que alguien ha pasado algunas horas golpeando su cabeza contra su monitor tratando de hacer que esto funcione, ¡así que espero que esto ayude a salvar su cordura!
Yo uso
conda
para administrar mis paquetes de Python.
Entonces, todo lo que hice en una terminal fuera de PyCharm fue:
conda install pyspark
o, si desea una versión anterior, diga 2.2.0, luego haga lo siguiente:
conda install pyspark=2.2.0
Esto también atrae automáticamente py4j.
PyCharm ya no se quejó de
import pyspark...
y la finalización del código también funcionó.
Tenga en cuenta que mi proyecto PyCharm ya estaba configurado para usar el intérprete de Python que viene con Anaconda.