No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Uso de SQLContext para Registro y Consultas con DataFrames en Spark

19/25
Recursos

¿Cómo registrar data frames como SQL?

Integrar Spark con SQL puede ser un poderoso recurso para los amantes de SQL que desean aprovechar sus habilidades en el análisis y gestión de datos grandes. Aquí, aprenderemos a registrar data frames como tablas temporales y utilizar SQL de una manera práctica y eficiente.

Registro de data frames como tablas temporales

Para emplear data frames como tablas en SQL, primero debemos registrarlos como tablas temporales. En nuestro ejemplo, registraremos tres data frames: resultado, deportista olímpico y países. Usamos el método register con un alias que simplifica su uso posterior.

# Registro de data frames como tablas temporales
resultado.registerTempTable("resultado")
deportista_olímpico.registerTempTable("deportista")
países.registerTempTable("paises")

Uso del SQLContext

El objeto SQLContext en Spark nos permite ejecutar comandos SQL directamente. Puedes especificar las sentencias SQL respetando el uso de palabras reservadas en mayúsculas por buenas prácticas. Por ejemplo:

# Ejecución de una consulta SQL simple
sqlContext.sql("SELECT medalla, equipo, sigla FROM resultado").show(5)

Comparación con el enfoque nativo de Spark

Aunque SQL es poderoso y familiar para muchos, el enfoque nativo de Spark ofrece ventajas significativas en rendimiento y eficiencia. A continuación, se realiza un ejemplo de consulta más complejo usando SQL, realizando JOINs entre tablas y aplicando restricciones.

SELECT medalla, equipo, sigla 
FROM resultado AS r
JOIN deportista AS d ON r.deportistaID = d.deportistaID
JOIN paises AS p ON d.equipoID = p.ID
WHERE medalla IS NOT NULL
ORDER BY sigla DESC

¿Cuándo usar SQL y cuándo funciones nativas de Spark?

  • SQL: Ideal para ejecuciones cortas debido a su familiaridad y simplicidad en el código.
  • Funciones nativas de Spark: Se recomienda al trabajar con grandes volúmenes de datos, ya que maximizan el rendimiento utilizando optimizaciones de ejecución específicas de Spark.

Consejos prácticos para usuarios avanzados

  • Aprovecha el optimizador de datos de Spark: Este controla el desempeño y corrige microerrores en ejecución.
  • Evalúa el contexto: Elige SQL para tareas más pequeñas o cuando la familiaridad es clave, pero cambia a las funciones de Spark para un mayor rendimiento con big data.

En resumen, elegir entre SQL y las funciones nativas de Spark depende del contexto y el tamaño de las operaciones. Es fundamental identificar cuál herramienta se alinea mejor con las necesidades de procesamiento sin comprometer la eficiencia. ¡Sigue explorando Spark y SQL para mejorar tus capacidades analíticas y de procesamiento de datos!

Aportes 5

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Saludos!
El método .registerTempTable("[alias]") está deprecado para las nuevas versiones. En ese caso se usa el método .createOrReplaceTempView("[alias]").

Vi que esta mostrando duplicados por lo que agregue la palabra DISTINCT despues del SELECT para eliminar los duplicados.

sqlContext.sql("""SELECT DISTINCT medalla, equipo, sigla
                    FROM resultado r
                    JOIN deportista d
                      ON r.deportista_id = d.deportista_id
                    JOIN paises p
                      ON p.equipo_id = d.equipo_id
                   WHERE medalla <> "NA"
                   ORDER BY sigla DESC
                    """).show()

para los que quieren conectar spark con postgresql en ubuntu yo hize lo siguiente baje el driver de JDBC https://jdbc.postgresql.org/download.html
descomprimi el archivo lo copie en descargas y lo pegue en la siguiente ruta /usr/share/java/ quedando
usr/share/java/postgresql-42.3.1.jar, luego exporte la ruta al CLASSPATH con el siguiente comando (export CLASSPATH="$CLASSPATH:/usr/share/java/postgresql-42.3.1.jar"), y quedo listo para usar.
despues en jupyter notebook escribi el siguiente codigo para conectar a la base

<code> 
from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.jars", "/usr/share/java/postgresql-42.3.1.jar") \
    .getOrCreate()

df = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql://localhost:5432/nombredelabase") \
    .option("dbtable", "nombredelatabla") \
    .option("user", "postgres") \
    .option("password", "password") \
    .option("driver", "org.postgresql.Driver") \
    .load()

df.printSchema()

espero les sirva

interesante