Primeros pasos con Pyspark y Pycharm

Guía definitiva para poder configurar el entorno de desarrollo de Pyspark en Pycharm; una de las opciones más completas.

Spark se ha convertido en la herramienta Big Data por excelencia, nos ayuda a procesar grandes volúmenes de datos de una manera simplificada, en cluster y tolerante a fallos.

A continuación veremos cómo configurar el entorno de desarrollo de Pyspark en Pycharm, que dentro de las diferentes opciones que podemos encontrar en el mercado como IDE de desarrollo, la versión community de Pycharm es de las opciones más completas.

El entorno sobre el que realizaremos la instalación será una máquina Ubuntu con las siguientes dependencias instaladas:

Lo primero que debemos hacer es descargar la versión compilada de Spark; actualmente la última versión de Spark es 3.0.1. Es aconsejable descargar el empaquetado que no contiene las dependencias de Hadoop, de esta forma podremos desacoplar la versión de Hadoop y la de Spark y combinarlas siempre y cuando sean compatibles. 

Instalación de Hadoop y Spark

  1. Descargamos el empaquetado de Spark y lo descomprimimos en /opt.
cd ~/
curl -O http://apache.mirror.anlx.net/spark/spark-3.0.1/spark-3.0.1-bin-without-hadoop.tgz
tar -xvzf spark-3.0.1-bin-without-hadoop.tgz
sudo mv spark-3.0.1-bin-without-hadoop /opt

2. Ahora hay que crear un enlace simbólico a la carpeta descomprimida. Este enlace nos permitirá cambiar de versión de Spark manteniendo las variables de entorno

sudo ln -s spark-3.0.1-bin-without-hadoop spark

3.  Una vez instalado Spark, debemos hacer proceder con los mismos pasos para la descarga de Hadoop.

cd ~/
curl -O http://apache.mirror.anlx.net/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
tar -xvzf hadoop-3.2.1.tar.gz
sudo mv hadoop-3.2.1 /opt 
sudo ln -s hadoop-3.2.1 hadoop

4.  Una vez que disponemos de Spark y Hadoop vinculados a nuestras enlaces simbólicos spark y hadoop respectivamente dentro de /opt, deberemos vincular las variables de entorno necesarias, para que el contexto de nuestras sesiones de terminal reconozcan las dos nuevas herramientas.

Para ello, debemos de añadir la exportación de las siguientes variables de entorno a nuestro bashrc, zshrc o similar, que utilicemos como archivo inicializador de sesiones de terminal.

#HADOOP
export HADOOP_HOME=/opt/hadoop
export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/tools/lib/*
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
 
#SPARK
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
export SPARK_DIST_CLASSPATH=$(hadoop --config $HADOOP_CONF_DIR classpath)
export SPARK_DIST_CLASSPATH=$SPARK_DIST_CLASSPATH:$SPARK_HOME/jars/*

* Nota: Recomendamos tener esta inicialización separada; en Damavis, solemos crear un archivo llamado ~/.spark_profile. el cual es cargado desde el archivo rc, con la sentencia source ~/.spark_profile.

5.   Ahora al abrir una nueva sesión de terminal, deberíamos poder lanzar los siguientes comandos:

hadoop version
spark-shell

Ejecución de un proyecto de ejemplo con Pycharm

Lo primero que debemos hacer, es descargar con Git el siguiente proyecto de ejemplo:

git clone https://github.com/damavis/spark-architecture-demo.git

Importamos el proyecto descargado con Pycharm y lo abrimos. En este escenario, para ejecutar el proyecto, tenemos dos opciones:

  1. La primera e inmediata sería la de crear un entorno virtual con conda o virtualenv instalando las dependencias especificadas en el setup.py.
  2. Ejecutar el código con la configuración de Spark y Hadoop.

En caso de escoger ésta última:

  1. Añadimos las librerías de Pyspark que hemos instalado en el directorio /opt.
    Para ello, debemos abrir settings e ir al apartado de Project Structure. Allí debemos añadir el contenido de los siguientes directorios:

/opt/spark/python/pyspark
/opt/spark/python/lib/py4j-0.10.9-src.zip

2.   En este momento podremos ejecutar main que está dentro de src
Es recomendable, para no tener que configurar el python_path, establecer la carpeta src como source; haciendo click derecho sobre la carpeta y marcando ésta como fuente.

3.   Por último ejecutamos el archivo main.py y establecemos una variable de entorno para poder tanto lanzar como depurar, el código Pyspark.

PYSPARK_SUBMIT_ARGS=--master local[*]  pyspark-shell

Si al ejecutar la aplicación, hay alguna dependencia de un empaquetado binario, se pueden establecer los argumentos como aparecen dentro de la documentación de Apache Spark. Por ejemplo:

PYSPARK_SUBMIT_ARGS=--master local[*]  --packages
org.apache.spark:spark-avro_2.12:3.0.1 pyspark-shell

¡Eso es todo!

Con esta configuración podremos depurar nuestras aplicaciones de Pyspark con Pycharm, para así corregir los posibles errores y aprovechar al máximo el potencial de la programación Python con Pycharm.

Si te ha parecido útil este post, pasa por nuestro blog y encuentra más artículos como este en la categoría Data Engineering. No olvides compartirlo con tus contactos para que ellos también puedan leerlo y opinar. ¡Nos vemos en redes!
Óscar García
Óscar García
Artículos: 24