Logotipo de Zephyrnet

Preguntas de entrevista más frecuentes en Apache Spark

Fecha:

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Introducción

Las capacidades de Apache lo hacen 100 veces más rápido que Hadoop. Tiene la capacidad de procesar una gran cantidad de datos en tan poco tiempo. La característica más importante de Spark es el procesamiento de datos en memoria.

Preguntas de la entrevista de Apache Spark

Spark es uno de los temas favoritos de los entrevistadores en las entrevistas de big data, por lo que en este blog repasaremos las preguntas de entrevista más importantes y frecuentes sobre Apache Spark. Vamos a empezar…

1. ¿Qué es la chispa?

Spark es un motor de cómputo en memoria de propósito general. Puede conectarlo con cualquier sistema de almacenamiento, como un sistema de almacenamiento local, HDFS, Amazon S3, etc. También le brinda la libertad de usar un administrador de recursos de su elección, ya sea Yarn, Mesos, Kubernetes o independiente. Está diseñado para administrar cargas de trabajo de aplicaciones por lotes, algoritmos iterativos, consultas interactivas y transmisión. Spark admite API de alto nivel como Java, Scala, Pitón, y R. Está construido en lenguaje Scala..

2. ¿Qué es RDD en Apache Spark?

RDD significan Conjunto de datos distribuido resistente. Es el bloque de construcción más importante de cualquier aplicación de chispa. es inmutable Las propiedades de RDD son: -

  • Resistente:- Tiene propiedades de tolerancia a fallas y puede recuperar rápidamente datos perdidos.
  • Repartido:- Los datos se distribuyen en múltiples nodos para un procesamiento más rápido.
  • Conjunto de datos:- Recopilación de puntos de datos sobre los que realizamos operaciones.

RDD proporciona tolerancia a fallas a través de un gráfico de linaje. Un gráfico de linaje realiza un seguimiento de las transformaciones que se ejecutarán después de que se haya llamado a una acción. El gráfico de linaje ayuda a volver a calcular cualquier RDD faltante o dañado debido a fallas en los nodos. Los RDD se utilizan para transformaciones y acciones de bajo nivel.

3. ¿Cuál es la diferencia entre SparkContext vs. SparkSession?

En la versión Spark 1.x, debemos crear diferentes contextos para cada API. Por ejemplo:-

  • SparkContext
  • Contexto SQL
  • contextocolmena 

Mientras que en la versión Spark 2.x, se introdujo un nuevo punto de entrada llamado SparkSession, que cubre por sí solo toda la funcionalidad. No es necesario crear diferentes contextos para los puntos de entrada.

SparkContext es el principal punto de entrada para acceder a las funcionalidades de Spark. Representa la conexión de un grupo de chispas que es útil para construir RDD, acumuladores y variables de transmisión en el grupo. Podemos acceder al objeto predeterminado de SparkContext en spark-shell, que está presente en un nombre de variable "Carolina del Sur."

Sesión de chispa: - Antes de la versión Spark 2.0, necesitamos diferentes contextos para acceder a las diferentes funcionalidades de Spark. Mientras que en chispa 2.0, tenemos un punto de entrada unificado llamado SparkSession. Contiene SQLContext, HiveContext y StreamingContext. No es necesario crear otros separados. Las API accesibles en esos contextos también están disponibles en SparkSessiony SparkSession incluye un SparkContext para el cómputo real.

4. ¿Qué es la variable de emisión?

Las variables de difusión en Spark son un mecanismo para compartir los datos entre los ejecutores para que sean de solo lectura. Sin variables de transmisión, tenemos que enviar los datos a cada ejecutor cada vez que realizan cualquier tipo de transformación y acción, lo que puede causar una sobrecarga en la red. Mientras que en el caso de las variables de difusión, se envían una vez a todos los ejecutores y se almacenan en caché allí para futuras referencias.

Caso de uso de variables de difusión

Supongamos que estamos haciendo transformaciones y necesitamos buscar una tabla más grande de códigos postales/códigos PIN. No es factible enviar los datos a cada ejecutor cuando sea necesario, y no podemos consultarlos cada vez en la base de datos. Entonces, en este caso, podemos convertir esta tabla de búsqueda en las variables de transmisión, y Spark la almacenará en caché en cada ejecutor.

5. Explique Par RDD?

Los RDD emparejados de Spark son una colección de valor clave pares Hay dos elementos de datos en un par clave-valor (KVP). La clave es el identificador, mientras que el el valor es el dato correspondiente al valor clave. Algunas operaciones especiales están disponibles en RDD de pares clave-valor, como operaciones distribuidas de "reproducción aleatoria", agrupación o agregación de elementos por una clave.

val spark = SparkSession.builder()

.appName("PairedRDDCreation")

.master("local")

.getOrCreate ()

val rdd = spark.sparkContext.parallelize(
List("Germany India USA","USA India Russia","India Brazil Canada China"))
val wordsRdd = rdd.flatMap(_.split(" "))
val pairRDD = wordsRdd.map(f=>(f,1))
pairRDD.foreach(println)

Salida:-

(Germany,1)
(India,1)
(USA,1)
(USA,1)
(India,1)
(Russia,1)
(India,1)
(Brazil,1)
(Canada,1)
(China,1)

6. ¿Cuál es la diferencia entre los métodos RDD persist() y cache()?

Los mecanismos de persistencia y almacenamiento en caché son las técnicas de optimización. Se puede utilizar tanto para el cálculo interactivo como para el iterativo. Iterativo significa reutilizar los resultados en múltiples cálculos. Interactivo significa que permite un flujo bidireccional de información. Estos mecanismos nos ayudan a guardar los resultados para que las próximas etapas puedan utilizarlos. Podemos guardar los RDD en Memoria (más preferido) o en Disco ((menos Preferido debido a su baja velocidad de acceso).

Persistir():- Sabemos que los RDD se pueden volver a calcular en cada acción debido a su comportamiento predeterminado. Para evitar el recálculo, podemos persistir con los RDD. Ahora, cada vez que llamamos a una acción en RDD, no se vuelve a realizar el cálculo.

En el método persist(), los resultados de los cálculos se almacenan en sus particiones. El método persistente almacenará los datos en JVM cuando trabaje con Java y Scala. Mientras que en python, cuando llamamos al método persistente, se lleva a cabo la serialización de los datos. Podemos almacenar los datos en la memoria o en el disco. También es posible una combinación de ambos.

Niveles de almacenamiento de RDD persistentes: -

1. SÓLO_MEMORIA(NIVEL PREDETERMINADO)

2. MEMORIA_Y_DISCO

3. MEMORIA_SÓLO_SER

4. MEMORIA_SÓLO_DISK_SER

5. DISCO_SÓLO

Cache():- Es lo mismo que el método persistente; la única diferencia es que la memoria caché almacena el resultado de los cálculos en el nivel de almacenamiento predeterminado, es decir, la memoria. Persist funcionará igual que un caché cuando el nivel de almacenamiento se establece en MEMORY_ONLY.

Sintaxis para eliminar los RDD: -

RDD.no persistente ()

7. ¿Qué es Spark Core?

Spark Core es la unidad fundamental de todas las aplicaciones de chispa. Realiza las siguientes funcionalidades: administración de memoria, recuperación de fallas, programación, distribución y monitoreo de trabajos e interacción con sistemas de almacenamiento. Se puede acceder a Spark Core a través de una interfaz de programación de aplicaciones (API) integrada en Java, Scala, Python y R. Contiene API que ayudan a definir y manipular los RDD. Estas API ayudan a ocultar la complejidad del procesamiento distribuido detrás de operadores simples de alto nivel. Proporciona conectividad básica con diferentes fuentes de datos, como AWS S3, HDFS, HBase, etc.

Apache Spark

 

8. ¿Qué es el linaje RDD?

Linaje RDD (gráfico de operador RDD or Gráfico de dependencia de RDD) es un gráfico que contiene todos los RDD principales de un RDD.

Linaje RDD

Las siguientes transformaciones pueden generar el gráfico anterior: -

val r00 = sc.paralelizar(0 a 9) val r01 = sc.paralelizar(0 a 90 por 10) val r10 = r00.cartesian(r01) val r11 = r00.map(n => (n, n)) val r12 = r00.zip(r01) val r13 = r01.keyBy(_ / 20) val r20 = Seq(r11, r12, r13).foldLeft(r10)(_ unión _)

1. El linaje RDD se crea cuando aplicamos diferentes tipos de transformaciones a un RDD, creando un llamado Plan de Ejecución Lógica.

2. El gráfico de linaje contiene información sobre todas las transformaciones que deben aplicarse cuando se llama a la acción.

3. Un plan de ejecución lógica comienza con el RDD más temprano y termina con el RDD, produciendo el resultado final sobre el cual se ha llamado a la acción.

9. ¿Cuál es la diferencia entre RDD y DataFrame?

Marco de datos:-

Un marco de datos almacena los datos en formato tabular. Es una colección distribuida de datos en filas y columnas. Las columnas pueden almacenar tipos de datos como numéricos, lógicos, factor o carácter. Facilita el procesamiento de conjuntos de datos más grandes. Los desarrolladores pueden imponer una estructura a una colección distribuida de datos con la ayuda de un marco de datos. También proporciona una abstracción de alto nivel sobre los datos distribuidos.

RDD:-

RDD(Conjunto de datos distribuido resistente) es una colección de elementos distribuidos en varios nodos de clúster. Los RDD son inmutables y tolerantes a fallas. Los RDD, una vez creados, no se pueden cambiar, pero podemos realizar varias transformaciones para generar nuevos RDD a partir de ellos.

10. ¿Explicar las variables compartidas del acumulador en Spark?

Los acumuladores son variables compartidas de solo lectura. Sólo se “añaden” mediante una operación asociativa y conmutativa. Se pueden usar para implementar contadores (como en MapReduce) o sumas. Spark admite de forma nativa acumuladores de tipos numéricos y también puede agregar compatibilidad con nuevos tipos.

Los acumuladores son variables incrementales. Las tareas que se ejecutan en los nodos pueden agregarse mientras que el programa controlador puede leer el valor. Las tareas que se ejecutan en diferentes máquinas pueden incrementar su valor, y esta información agregada está disponible para el controlador.

En este artículo, hemos discutido las preguntas de entrevista más importantes y frecuentes sobre Apache Spark. Comenzamos nuestra discusión con preguntas fundamentales como qué es una chispa, RDD, Dataset y DataFrame. Luego, avanzamos hacia temas intermedios y avanzados como una variable de transmisión, caché y método de persistencia en Spark, acumuladores y pares de RDD. Tenemos una variedad diferente de preguntas relacionadas con la chispa.

Los puntos clave de este artículo son: -

  • 1. Aprendemos la diferencia entre los términos más utilizados en Apache Spark, es decir, RDD, DAG, DataFrame, Dataset, etc.
  • 2. Entendimos las API estructuradas y cómo se utilizan para realizar diferentes operaciones en los datos.
  • 3. También aprendemos sobre par RDD, linaje, variables de transmisión y acumuladores.
  • 4. Otros aprendizajes son sparkcontext v/s sparksession, RDD v/s DataFrame y Spark core.

Espero que este artículo lo ayude en la preparación de su entrevista relacionada con Apache Spark. Si tiene alguna opinión o pregunta, comente a continuación. Conéctate conmigo en Etiqueta LinkedIn para mayor discusión.

¡¡¡Seguir aprendiendo!!!

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

Información más reciente

punto_img