Create an account or log in

Keep learning for free! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

1 Días
13 Hrs
9 Min
33 Seg

Jupyter vs CLI: ejecución de Spark desde la línea de comandos

5/25
Resources

How to configure environment variables in Linux for Spark and Java?

Proper configuration of environment variables is essential to ensure that Spark and Java work properly in a Linux environment. Start by editing the RC base configuration file, which contains the necessary settings for your user session. It is important to add the specific paths appropriately:

  1. Java path: add a comment to identify the lines containing the Java settings.

    # Java Padexport  JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export  PATH=$PATH:$JAVA_HOME/bin
    • JAVA_HOME: Specifies the folder where Java is installed.
  2. Settings for Spark: Set the SPARK_HOME variable in a similar way, pointing to the folder where you unzipped Spark.

    # Spark padexport  SPARK_HOME=/home/spark/spark/sparkexport  PATH=$PATH:$SPARK_HOME/bin
  3. Variables for Python and PySpark: Essential for using Spark with Python.

    export  PYTHONPATH=$SPARK_HOME/python:$PYTHONPATHexport PYSPARK_PYTHON=python3

Don't forget to save the changes and reload the configuration file with the source command. This ensures that the new configurations are active without the need to reboot the system.

How to run a Spark process using command line?

Running Spark processes via command line, although effective, can be somewhat complicated due to the amount of information it generates. Here's how to do it in a basic way:

  1. Setting up the environment: make sure you have everything configured correctly and navigate to the folder where Spark resides.

  2. Using PySpark: To run live code similar to logging into the Python interpreter, use PySpark.

  3. Using spark-submit for .py scripts: If you want to run a Python file with Spark, the spark-submit command is essential.

    • Locate your script and data file, for example code_example.py and data.csv.
    • Execute the command:
      bin/spark-submit code_example.py data.csv

During execution, you will receive messages in the terminal indicating the progress and success of the operations performed by Spark. However, these logs may hide the results you are looking for, so it is important to review the output carefully.

What challenges does using the command line present and how can they be mitigated?

The command line is powerful, but it can lead to a sea of logs and messages, making it difficult to distinguish the relevant results. This method is ideal when:

  • The code is fully tested.
  • You need to run it in production environments.
  • You want to perform demonstrations with a subset of data.

Although functional, for educational purposes and in situations where you need to understand the state of processes, it is advisable to look for alternatives. One option is to integrate Anaconda, which facilitates access to results and interaction with the Spark environment in a more user-friendly and didactic way.

For those interested in running and learning about Spark more comfortably, we recommend the next session that will explore how to configure Anaconda and make the process more accessible. And remember, there is always a community ready to help: leave your questions or comments for support, keep learning and exploring the world of Spark!

Contributions 25

Questions 5

Sort by:

Want to see more contributions, questions and answers from the community?

Si utilizas wsl2 y obtienes este error

 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Traceback (most recent call last):
File "/home/rb/Platzi/Escuela de Data Science/22.- Curso Introductorio de Spark/codeExample.py", line 3, in <module>

Es porque pySpark de momento solo es soportado hasta la versión 3.7.9 de python, en mi caso python3.8.2 es la versión por defecto con debian/ubuntu. En mis apuntes al terminar el curso dejo detallado como solucionar el error y algunos warnings

De momento esto hace el truco

La solución instala python 3.7

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.7

Modifica las variables de entorno

# de esto
export PYSPARK_PYTHON=python3

# a esto
export PYSPARK_PYTHON=python3.7

Despues de 4 horas batallando entre maquinas virtuales, instalación en windows y pruebas en google colab les dejo como logre hacer el ejemplo desde Google Colab, lo unico es que se deben agregar los archivos codeExamplepy y data.csv a colab cada vez que se inicie el trabajo, ya que cuando se cierra la conexión los archivos se borran.

https://bit.ly/3iCU0eU

Espero les funcione.

Para los que usan windows, pueden ejecutar spark-submit mediante cmd desde cualquier directorio, en este caso, para el ejemplo del video deben posicionarse en el directorio donde guardaron el ejemplo y desde ahí ejecutar spark-submit

Ejemplo:
\Users\IOS\Desktop\PLATZI\SPARK> spark-submit codeExample .py data.csv

##Path Java
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
export PATH=$JAVA_HOME/bin:$PATH

#Spark
export SPARK_HOME="/home/spark/spark"
export PATH=$SPARK_HOME:$PATH
export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH
export PYSPARK_PYTHON=python3

Se puede usar ‘spark-shell’ para abrir la shell en Scala o ‘pyspark’ para abrir la shell en un entorno de Python. Puede ser igual de cómodo para lanzar líneas de códigos individuales y hacer pruebas cortas. Si se hace de esta forma Spark crea automáticamente el contexto.

A veces me intriga mucho el como hay developers que prefieron CLI vs una buenas GUI; al final del dia en tu trabajo (hablo por experiencia), no evaluan el quien hace los comandos más complejos, sino quien aporta más valor a la empreza de una manera más rapida. Aun asi, guardo esta clase para el futuro 😄

Hola, estuve checando el codigo, y observe que la operacion count() esta contando cuantas veces aparece, en este caso, el estado y el color. Para saber la suma del count, entonces se le tiene que agregar la operacion sum()

import sys

from pyspark.sql import SparkSession
from pyspark.sql.functions import count, sum as sum_

if __name__ == "__main__":
    #if len(sys.argv) != 2:
    #    print("Usage: mnmcount <file>", file=sys.stderr)
    #    sys.exit(-1)

    spark = (SparkSession
        .builder
        .appName("PythonMnMCount")
        .getOrCreate())
    # get the M&M data set file name
    mnm_file = sys.argv[1]
    # read the file into a Spark DataFrame
    mnm_df = (spark.read.format("csv")
        .option("header", "true")
        .option("inferSchema", "true")
        .load("D:/Spark Most Current/data.csv"))
    mnm_df.show(n=5, truncate=False)

    # find the aggregate count for California by filtering
    ca_count_mnm_df = ( mnm_df.select("*")
                       .where(mnm_df.State == 'CA')
                       .groupBy("State", "Color")
                       .agg(count("Count")
                            .alias("Total"), 
                           sum_("Count")
                           .alias("Total_Sum"))
                       .orderBy("Total", ascending=False) )

    # show the resulting aggregation for California
    ca_count_mnm_df.show(n=10, truncate=False)
+-----+------+-----+---------+
|State|Color |Total|Total_Sum|
+-----+------+-----+---------+
|CA   |Yellow|1807 |100956   |
|CA   |Green |1723 |93505    |
|CA   |Brown |1718 |95762    |
|CA   |Orange|1657 |90311    |
|CA   |Red   |1656 |91527    |
|CA   |Blue  |1603 |89123    |
+-----+------+-----+---------+
Yo instale el ambiente en Google Colab y estas son las lineas del código, solo ten en cuenta tener la ultima versión del Spark la fecha que realize esto es el 27/06/2024 !apt-get install openjdk-8-jdk-headless -qq > /dev/null !wget -q https://downloads.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz!tar xf spark-3.5.1-bin-hadoop3.tgz!pip install -q findspark pyspark \---------------------------------------- import osos.environ\["JAVA\_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"os.environ\["SPARK\_HOME"] = "/content/spark-3.5.1-bin-hadoop3" \----------------------------------------- import findsparkfindspark.init() from pyspark.sql import SparkSessionspark = SparkSession.builder.appName('Mi\_Primera\_Base').getOrCreate() \---------------------------------------- Esta es el código para probar lo anterior: \# Create a list of datadata = \[("Alice", 25), ("Bob", 30), ("Charlie", 28)] \# Create a DataFrame from the datadf = spark.createDataFrame(data, \["name", "age"]) \# Print the DataFramedf.show()

podria ser el curso en windows… se hace super enrredado querer tratar de hacer lo que explica acá

Hola Oscar, soy usuario de windows y veo que muchos estudiantes de platzi usan windows, me parece que seria adecuado hacer videos para quienes tenemos windows o por lo menos subir un archivo pdf con los pasos necesarios. Gracias

Para todos aquellos con problemas por la versión de python.
En mi caso ya tenía instalado anaconda y una versión de python, lo que hice en la terminal de ubuntu fue crear un ambiente para Spark lo cual seguramente es incluso mejor que instalar paquetes en todo el ambiente y cambiar la versión de python que ya tenemos:

conda create --name Spark python=3.7
conda activate Spark
conda install py4j

esto aunado al export que han puesto en otros comentarios fue suficiente para lograr que el código de la clase corriera sin problemas.

https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

Hola, tengo una duda, donde se usa:
from pyspark.sql.types import row
Es que no recuerdo donde se usa,

Tengo duda, que diferencia si instalo el core de Scala al de Spark, si al ejecutar el spark-shell me ejecuta el entorno de CLI de scala

Se puede configurar un ambiente para el uso del spark por medio de collab notes, el procedimiento es el siguiente: ```python !apt-get install openjdk-8-jdk-headless -qq > /dev/null !wget -q https://downloads.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz !tar -xvf spark-3.5.1-bin-hadoop3.tgz !pip install -q findspark !pip install pyspark ``````python import os os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64" os.environ["SPARK_HOME"] = "/content/spark-3.5.1-bin-hadoop3" ``````python import findspark findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder.master("local[*]").getOrCreate() ```Nota: Deben tener en consideración que versión de paquetes se encuentran disponibles para descargar desde el repositorio downloads.apache.org/spark/ . Dado que en algunas ocasiones deberán modificar manualmente SPARKHOME, la URL de descarga y el nombre del archivo a descomprimir

Si quieren ahorrarse la instalación local y ejecutarlo desde un servicio de notebooks como Deepnote, solo es cuestión de pegar dos celdas en tu notebook. Acá la documentación ~

Para los que estén utilizando Windows puede descargar cmdr para emular los comandos linux
https://cmder.net/

A ver como se ve en anaconda

Recuerden actualizar el archivo bashrc:
source .bashrc

Hola, ayuda por favor, me sale el siguiente error:
py4j.protocol.Py4JJavaError: An error occurred while calling o32.load

Si quieren usar la linea de comandos y evitar todos esos logs innecesarios, pueden editar el archivo conf/log4j.properties que se encuentra en su ruta de spark de esta forma:

# Set everything to be logged to the console
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=WARN
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=WARN

Para los que quieran utilizar wsl2 con ubuntu les comparto un link para q puedan conectarse de manera gráfica y no sea todo línea de comandos.

video para conectarse de manera gráfica

Comandos de ejecución

Al final solo deben ejecutar un comando y conectarse por el escritorio remoto de windows

interesante

Me sale este error.

Si estan teniendo problemas con la instalación y configuración, acá les dejo una guía que hice “infalible” para Ubuntu. Están citadas todas las fuentes por si quieren ir mas al detalle. Para usuarios de windows recomiendo instalar wsl2 es mucho más práctico . https://drive.google.com/file/d/1Lk9YIfNtAd9CLvLZbRC9c5YlF1i1TQP6/view?usp=sharing

Si les sale el error:

WARN Utils: Your hostname resolves to a loopback address: 127.0.1.1; using 192.168.1.67 instead...

Se soluciona agregando la siguiente variable en .bashrc

export SPARK_LOCAL_IP="127.0.0.1"

Si les sale el error

Unable to load native-hadoop library

Se soluciona instalando python3.7. PySpark es compatible hasta la versión 3.7.9, así que hay que descargarla e instalarla.

https://www.python.org/downloads/release/python-379/

# Al descomprimirla se ubican en la carpeta y usan:
./configure
make
make install

Una vez hecho esto, modifican la variable:

export PYSPARK_PYTHON=python3
# por:
export PYSPARK_PYTHON=python3.7