Podcast
Questions and Answers
¿Cuál es la estructura de datos clave en la API estructurada de Spark?
¿Cuál es la estructura de datos clave en la API estructurada de Spark?
- DataFrame (correct)
- Spark SQL
- Spark Core
- RDD (Resilient Distributed Dataset)
¿Cuál de las siguientes opciones NO es una ventaja de usar DataFrames sobre RDDs en Spark?
¿Cuál de las siguientes opciones NO es una ventaja de usar DataFrames sobre RDDs en Spark?
- Mayor facilidad de uso.
- Optimizaciones a través Catalyst.
- Control preciso sobre la estructura de datos. (correct)
- Mayor nivel de abstracción.
¿Cuál de las siguientes operaciones puede realizar Spark directamente sobre un DataFrame para guardarlo en formato CSV, sobrescribiendo el archivo si existe y usando tabuladores como separador?
¿Cuál de las siguientes operaciones puede realizar Spark directamente sobre un DataFrame para guardarlo en formato CSV, sobrescribiendo el archivo si existe y usando tabuladores como separador?
- `spark.write.csv("path/to/hdfs/directory").mode("overwrite").sep("\t").header(True)`
- `df.save("path/to/hdfs/directory", format="csv", mode="overwrite", sep="\t", header=True)`
- `df.write.csv("path/to/hdfs/directory", mode="overwrite", sep="\t", header=True)`
- `df.write.format("csv").mode("overwrite").option("sep", "\t").option("header", "true").save("path/to/hdfs/directory")` (correct)
Si tienes un DataFrame llamado df
, ¿cómo seleccionarías la columna 'nombre' y mostrarías los 5 primeros registros utlizando pyspark?
Si tienes un DataFrame llamado df
, ¿cómo seleccionarías la columna 'nombre' y mostrarías los 5 primeros registros utlizando pyspark?
¿Qué hace la función withColumn
en Spark DataFrames?
¿Qué hace la función withColumn
en Spark DataFrames?
En Spark SQL, ¿qué diferencia una vista de una tabla?
En Spark SQL, ¿qué diferencia una vista de una tabla?
¿Cuál de las siguientes opciones es una forma correcta de registrar un DataFrame llamado mi_df
como una tabla temporal en Spark SQL para poder consultarlo con SQL?
¿Cuál de las siguientes opciones es una forma correcta de registrar un DataFrame llamado mi_df
como una tabla temporal en Spark SQL para poder consultarlo con SQL?
¿Qué implicación tiene usar la opción inferSchema = true
al leer un archivo CSV en Spark?
¿Qué implicación tiene usar la opción inferSchema = true
al leer un archivo CSV en Spark?
¿Cuál es el propósito principal de la función groupBy
en Spark DataFrames?
¿Cuál es el propósito principal de la función groupBy
en Spark DataFrames?
Si se tiene un DataFrame df
y se desea crear una nueva columna llamada total
, que sea la suma de las columnas col1
y col2
, ¿cuál es la forma correcta de hacerlo usando la API de DataFrames en pyspark?
Si se tiene un DataFrame df
y se desea crear una nueva columna llamada total
, que sea la suma de las columnas col1
y col2
, ¿cuál es la forma correcta de hacerlo usando la API de DataFrames en pyspark?
En Spark SQL, ¿qué tipo de tabla elimina tanto los datos como los metadatos al ser eliminada?
En Spark SQL, ¿qué tipo de tabla elimina tanto los datos como los metadatos al ser eliminada?
Spark SQL está optimizado para:
Spark SQL está optimizado para:
¿Qué función se utiliza para renombrar una columna en un DataFrame en Spark?
¿Qué función se utiliza para renombrar una columna en un DataFrame en Spark?
¿Cuál de las siguientes fuentes de datos NO es directamente soportada por Spark para lectura a través de conectores?
¿Cuál de las siguientes fuentes de datos NO es directamente soportada por Spark para lectura a través de conectores?
Para leer datos desde Spark, ¿qué atributo de SparkSession se utiliza?
Para leer datos desde Spark, ¿qué atributo de SparkSession se utiliza?
Al leer un DataFrame, ¿qué opción de modo de lectura descarta las filas que contienen alguno de sus registros con un formato incorrecto?
Al leer un DataFrame, ¿qué opción de modo de lectura descarta las filas que contienen alguno de sus registros con un formato incorrecto?
¿Cuál es la función del método printSchema()
en un DataFrame de Spark?
¿Cuál es la función del método printSchema()
en un DataFrame de Spark?
¿Qué operación en Spark SQL permite definir grupos para después calcular un resultado agregado (como la suma o la media) para cada grupo?
¿Qué operación en Spark SQL permite definir grupos para después calcular un resultado agregado (como la suma o la media) para cada grupo?
¿Qué es Catalyst en el contexto de Spark?
¿Qué es Catalyst en el contexto de Spark?
¿Qué opción de escritura en DataFrames de Spark permite añadir datos a un fichero existente?
¿Qué opción de escritura en DataFrames de Spark permite añadir datos a un fichero existente?
¿Qué ocurrirá si intentas ejecutar el método toPandas
en un DataFrame de Spark que contiene más datos de los que caben en la memoria RAM del nodo driver?
¿Qué ocurrirá si intentas ejecutar el método toPandas
en un DataFrame de Spark que contiene más datos de los que caben en la memoria RAM del nodo driver?
¿Cuál de las siguientes afirmaciones es verdadera sobre la interoperabilidad entre Spark SQL y la API estructurada de DataFrames?
¿Cuál de las siguientes afirmaciones es verdadera sobre la interoperabilidad entre Spark SQL y la API estructurada de DataFrames?
¿Cuál de los siguientes NO es un tipo de vista en Spark SQL?
¿Cuál de los siguientes NO es un tipo de vista en Spark SQL?
¿Qué tipo de datos devuelve la función col()
en Spark cuando se selecciona una columna de un DataFrame?
¿Qué tipo de datos devuelve la función col()
en Spark cuando se selecciona una columna de un DataFrame?
Si deseas leer un archivo Parquet en Spark, ¿qué formato debes especificar en el método spark.read.format()
?
Si deseas leer un archivo Parquet en Spark, ¿qué formato debes especificar en el método spark.read.format()
?
Cuando se usa la función where()
en un DataFrame de Spark, ¿qué tipo de expresión se debe pasar como argumento?
Cuando se usa la función where()
en un DataFrame de Spark, ¿qué tipo de expresión se debe pasar como argumento?
¿Qué función de Spark se usa para realizar una unión (join) entre dos DataFrames?
¿Qué función de Spark se usa para realizar una unión (join) entre dos DataFrames?
¿Qué función de Spark se usa para quitar filas duplicadas de un DataFrame?
¿Qué función de Spark se usa para quitar filas duplicadas de un DataFrame?
Cuál es la diferencia entre las opciones 'errorIfExists'
y 'ignore'
al escribir un DataFrame en Spark?
Cuál es la diferencia entre las opciones 'errorIfExists'
y 'ignore'
al escribir un DataFrame en Spark?
¿Cuál es la finalidad de la función udf
en PySpark?
¿Cuál es la finalidad de la función udf
en PySpark?
¿Qué formato de archivo almacena el esquema junto con los datos, facilitando la inferencia del esquema en Spark?
¿Qué formato de archivo almacena el esquema junto con los datos, facilitando la inferencia del esquema en Spark?
Cuál es la sintaxis correcta en Spark SQL para crear una vista temporal global llamada global_temp_view
a partir de una tabla existente llamada my_table
?
Cuál es la sintaxis correcta en Spark SQL para crear una vista temporal global llamada global_temp_view
a partir de una tabla existente llamada my_table
?
¿Cuál es el propósito de la función explode
en Spark SQL?
¿Cuál es el propósito de la función explode
en Spark SQL?
¿Qué función se utiliza en Spark DataFrames para aplicar una función a cada elemento de una columna y devolver una nueva columna con los resultados, ejecutándose de manera distribuida?
¿Qué función se utiliza en Spark DataFrames para aplicar una función a cada elemento de una columna y devolver una nueva columna con los resultados, ejecutándose de manera distribuida?
Flashcards
¿Qué es un DataFrame de Spark?
¿Qué es un DataFrame de Spark?
Es una tabla de datos distribuida en la RAM, formada por filas y columnas con nombre y tipo.
¿Qué define el schema de un DataFrame?
¿Qué define el schema de un DataFrame?
El esquema define el nombre y el tipo de dato de cada columna en un DataFrame.
¿Qué permite la API estructurada de Spark?
¿Qué permite la API estructurada de Spark?
La lectura y escritura de DataFrames con diversos formatos de archivo (CSV, JSON, Parquet, etc.) y fuentes (HDFS, Amazon S3, bases de datos).
¿Qué hace la opción inferSchema
?
¿Qué hace la opción inferSchema
?
Signup and view all the flashcards
¿Qué indica la opción header
en CSV?
¿Qué indica la opción header
en CSV?
Signup and view all the flashcards
¿Cómo se escribe un DataFrame a un fichero?
¿Cómo se escribe un DataFrame a un fichero?
Signup and view all the flashcards
¿Qué permite el encadenamiento de transformaciones?
¿Qué permite el encadenamiento de transformaciones?
Signup and view all the flashcards
¿Qué hace col("nombreCol")
?
¿Qué hace col("nombreCol")
?
Signup and view all the flashcards
¿Qué hace withColumn
?
¿Qué hace withColumn
?
Signup and view all the flashcards
¿Qué hace withColumnRenamed
?
¿Qué hace withColumnRenamed
?
Signup and view all the flashcards
¿Qué hace drop
?
¿Qué hace drop
?
Signup and view all the flashcards
¿Cómo se filtran y agrupan DataFrames?
¿Cómo se filtran y agrupan DataFrames?
Signup and view all the flashcards
¿Cómo acceder al RDD envuelto por un DataFrame?
¿Cómo acceder al RDD envuelto por un DataFrame?
Signup and view all the flashcards
¿Para qué tipo de consultas está pensado Spark SQL?
¿Para qué tipo de consultas está pensado Spark SQL?
Signup and view all the flashcards
¿Cómo crear tablas temporales con Spark SQL?
¿Cómo crear tablas temporales con Spark SQL?
Signup and view all the flashcards
¿Qué permite la consulta CREATE EXTERNAL TABLE
?
¿Qué permite la consulta CREATE EXTERNAL TABLE
?
Signup and view all the flashcards
¿Qué son las vistas en Spark SQL?
¿Qué son las vistas en Spark SQL?
Signup and view all the flashcards
¿Cómo se crean las vistas?
¿Cómo se crean las vistas?
Signup and view all the flashcards
Study Notes
Introducción a Spark II
- Spark es un framework de programación distribuida diseñado para mejorar la eficiencia, rapidez y programación intuitiva en el procesamiento de grandes cantidades de datos en clústeres, superando al paradigma MapReduce.
- Spark incluye componentes como Spark Core y RDD, y ahora destaca la API estructurada con DataFrames, que facilitan la creación y manipulación de datos.
- Los objetivos principales son comprender la API estructurada de Spark y el DataFrame, identificar ventajas de usar DataFrames en lugar de RDD, conocer Spark SQL y sus similitudes/diferencias con la API estructurada, y practicar funciones de procesamiento típicas con ambas APIs.
DataFrames en Spark
- Los DataFrames en Spark permiten manejar RDD como tablas de datos estructuradas en filas y columnas, aportan abstracción y facilidad de uso.
- Un DataFrame es una tabla de datos distribuida en la RAM de los nodos, organizada en filas y columnas con nombre y tipo, semejante a bases de datos relacionales.
- Internamente, un DataFrame es un RDD de objetos de tipo Row, donde cada Row representa una fila de la tabla con componentes (columnas) que tienen nombre y tipo predefinido por el esquema.
- Es necesario recordar que los DataFrames se distribuyen en la memoria RAM de los nodos worker.
API Estructurada de Spark: Lectura y Escritura de DataFrames
- Spark puede leer información de diversas fuentes de datos mediante conectores específicos que indican cómo obtener datos y convertirlos en DataFrames.
- Las fuentes de datos comunes incluyen HDFS (CSV, JSON, Parquet, ORC, texto plano), Amazon S3, bases de datos relacionales (JDBC/ODBC), bases de datos no relacionales (Cassandra, MongoDB) y Kafka.
- Para leer datos en Spark, se usa el atributo spark.read de la SparkSession y se especifican opciones según el tipo de fichero; es obligatoria la ruta del fichero, el resto son opcionales.
- En cuanto al esquema, algunos ficheros (Parquet, ORC, Avro) lo almacenan junto a los datos. Los que no, tienen las opciones de inferir (true), que no infiera (false) y lea como string, o especificarlo explícitamente.
- Los ficheros CSV pueden ser problemáticos por la división en columnas, que depende de separadores complejos y a veces confusos. Spark no soporta separadores de más de un carácter.
Escritura de DataFrames
- La operación de escritura es análoga pero usando write de los DataFrames y especificando:
- Formato con methodo format(), igual que para leer.
- Modo de escritura: append, overwrite, errorIfExists, ignore.
- Opciones específicas del formato.
API Estructurada de Spark: Manipulación de DataFrames
- Las operaciones de la API estructurada actúan sobre columnas (clase Column), optimizadas por Catalyst para una ejecución más rápida.
- Las manipulaciones devuelven un nuevo DataFrame sin alterar el original (los RDD son inmutables). Se pueden encadenar transformaciones.
- "col(nombreCol)" sirve para seleccionar una columna y devuelve un objeto Column donde podemos realizar transformaciones.
- "select" permite seleccionar columnas de diferentes formas.
- "alias" asigna un nombre a la columna sobre la que se aplica.
- “withColumn” devuelve el nuevo DF con todas las columnas del original más una nueva columna añadida al final, como resultado de una operación entre columnas existentes que devuelve como resultado un objeto Column.
- "drop" elimina una columna.
- "withColumnRenamed" renombra una columna.
- "when(condición, valorReemplazo1).otherwise(valorReemplazo2)" sirve para reemplazar valores de una columna con una condición.
- Existe una serie de funciones matemáticas y estadísticas disponibles para su aplicación en DataFrames.
Combinaciones y filtrado de DataFrames
- Unión de DataFrames: df1.unionAll(df2).
- Diferencia de DataFrames: df1.except(df2).
- Las operaciones que podíamos usar sobre RDD suelen estar disponibles también para los DataFrames.
Operaciones de Agrupamiento y Agregación
- El método groupBy("nombreCol1”, “nombreCol2”, …) sobre un DataFrame devuelve una estructura de datos llamada RelationalGroupedDataset, que no es un DataFrame y sobre la que apenas se pueden aplicar operaciones.
- Se suelen aplicar operaciones como count(), que efectúa un conteo del número de elementos de cada grupo, o la función agg(), que es la más habitual y realiza, para cada grupo, las agregaciones que le indiquemos sobre las columnas seleccionadas.
Spark SQL
- Spark SQL ofrece una alternativa poderosa: operaciones escritas en SQL sobre DataFrames registrados como tablas, integrándose con la API de DataFrames y compilándose en un plan de ejecución unificado.
- Spark SQL está diseñado para el procesamiento de consultas en batch (OLTP), similar a Hive.
- Opciones para ejecutar consultas SQL en Spark:
- Interfaz de línea de comandos: mediante './bin/spark-sql'.
- API de Spark SQL: sql() en SparkSession para consultas a tablas Hive, devuelve DataFrames.
- Para el caso de que se quiera registrar un DataFrame como una tabla de Hive, existe el método createOrReplaceTempView, que la registra solo durante esta sesión.
- Además, la API SQL es totalmente interoperable con la API estructurada, de forma que se puede crear un DataFrame, manipularlo primero con SQL y después con la API estructurada.
- Servidor JDBC/ODBC: usando aplicaciones BI (como Tableau).
Tablas en SparkSQL
- El elemento de trabajo son las tablas, equivalente a los DataFrames. Toda tabla pertenece a una base de datos, si no se especifica, usa la de defecto (default). Las tablas siempre contienen datos y no existe el concepto de tabla temporal. En su lugar, existen vistas, que no contienen datos.
- Al crear tablas, indicar si serán gestionadas por Spark (managed table) o no (unmanaged table). Una tabla tiene datos y metadatos que la describen.
- Tablas no gestionadas: tabla desde ficheros en disco, Spark no gestiona los datos (ya existían).
- Tablas gestionadas: al guardar un DataFrame como tabla (ej: saveAsTable), Spark la gestiona, almacenando los datos nuevos.
- Tablas externas: compatibilidad con Hive, metadatos gestionados por Spark, pero no los datos (CREATE EXTERNAL TABLE).
- Si la tabla está gestionada por Spark, tanto los datos como los metadatos, se eliminarán al eliminar la tabla. En caso contrario, se eliminan los metadatos y los datos originales permanecerán intactos).
Vistas en Spark SQL
- Una vista especifica un conjunto de transformaciones sobre una tabla para conseguir unos resultados. Las vistas se muestran como tablas, pero no guardan los datos en una nueva localización.
- Tipos de vistas:
- Estándar: disponible de sesión en sesión.
- Temporales: solo disponible en la sesión actual.
- Globales: accesible desde cualquier punto de la aplicación Spark, pero se elimina al final de la sesión.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.