Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Te damos la bienvenida a la segunda edición de Aprendiendo Spark. Han pasado cinco años desde que se publicó la primera edición en 2015, originalmente escrita por Holden Karau, Andy Konwinski, Patrick Wendell y Matei Zaharia. Esta nueva edición se ha actualizado para reflejar la evolución de Apache Spark a través de Spark 2.x y Spark 3.0, incluido su ecosistema ampliado de fuentes de datos incorporadas y externas, aprendizaje automático y tecnologías de streaming con las que Spark está estrechamente integrado.
A lo largo de los años, desde su primera versión 1.x, Spark se ha convertido en el motor de procesamiento unificado de big data de facto. Por el camino, ha ampliado su alcance para incluir soporte para diversas cargas de trabajo analíticas. Nuestra intención es captar y conservar esta evolución para los lectores, mostrando no sólo cómo puedes utilizar Spark, sino cómo encaja en la nueva era de los grandes datos y el aprendizaje automático. De ahí que hayamos diseñado cada capítulo de forma que se construya progresivamente sobre las bases sentadas por los capítulos anteriores, asegurándonos de que el contenido es adecuado para el público al que va dirigido.
A quién va dirigido este libro
La mayoría de los desarrolladores que trabajan con big data son ingenieros de datos, científicos de datos o ingenieros de aprendizaje automático. Este libro está dirigido a esos profesionales que buscan utilizar Spark para escalar sus aplicaciones y manejar cantidades masivas de datos.
En concreto, los ingenieros de datos aprenderán a utilizar las API estructuradas de Spark para realizar exploraciones y análisis de datos complejos tanto en datos por lotes como en streaming; a utilizar Spark SQL para consultas interactivas; a utilizar las fuentes de datos integradas y externas de Spark para leer, refinar y escribir datos en diferentes formatos de archivo como parte de sus tareas de extracción, transformación y carga (ETL); y a construir lagos de datos fiables con Spark y el formato de tablas de código abierto Delta Lake.
Para los científicos de datos y los ingenieros de aprendizaje automático, la biblioteca MLlib de Spark ofrece muchos algoritmos comunes para construir modelos de aprendizaje automático distribuido. Cubriremos cómo construir pipelines con MLlib, buenas prácticas para el aprendizaje automático distribuido, cómo utilizar Spark para escalar modelos de nodo único, y cómo gestionar e implementar estos modelos utilizando la biblioteca de código abierto MLflow.
Aunque el libro se centra en el aprendizaje de Spark como motor analítico para diversas cargas de trabajo, no cubriremos todos los lenguajes que admite Spark. La mayoría de los ejemplos de los capítulos están escritos en Scala, Python y SQL. Cuando ha sido necesario, hemos infundido un poco de Java. Para los interesados en aprender Spark con R, recomendamos Mastering Spark with R (O'Reilly) de Javier Luraschi, Kevin Kuo y Edgar Ruiz.
Por último, dado que Spark es un motor distribuido, es fundamental comprender los conceptos de aplicación de Spark. Te guiaremos sobre cómo interactúa tu aplicación Spark con los componentes distribuidos de Spark y cómo se descompone la ejecución en tareas paralelas en un clúster. También veremos qué modos de implementación son compatibles y en qué entornos.
Aunque son muchos los temas que hemos decidido cubrir, hay algunos en los que hemos optado por no centrarnos. Entre ellos se incluyen las antiguas API de bajo nivel de conjuntos de datos distribuidos resistentes (RDD) y GraphX, la API de Spark para grafos y computación paralela a grafos. Tampoco hemos tratado temas avanzados como la forma de ampliar el optimizador Catalyst de Spark para implementar tus propias operaciones, cómo implementar tu propio catálogo o cómo escribir tus propios sumideros y fuentes de datos DataSource V2. Aunque forman parte de Spark, están fuera del alcance de tu primer libro sobre el aprendizaje de Spark.
En su lugar, hemos centrado y organizado el libro en torno a las API estructuradas de Spark, en todos sus componentes, y en cómo puedes utilizar Spark para procesar datos estructurados a escala para realizar tus tareas de ingeniería de datos o ciencia de datos.
Cómo está organizado el libro
Hemos organizado el libro de forma que te lleve de un capítulo a otro introduciendo conceptos, demostrando estos conceptos mediante fragmentos de código de ejemplo y proporcionando ejemplos de código completos o cuadernos en el repositorio GitHub del libro.
- Capítulo 1, "Introducción a Apache Spark: Un motor analítico unificado"
-
Te introduce en la evolución del big data y proporciona una visión general de alto nivel de Apache Spark y su aplicación al big data.
- Capítulo 2, "Descarga de Apache Spark y primeros pasos"
-
Te guía en la descarga y configuración de Apache Spark en tu máquina local.
- Del Capítulo3, "API estructuradas de Apache Spark" al Capítulo 6, "Spark SQL y conjuntos de datos"
-
Estos capítulos se centran en el uso de las API estructuradas DataFrame y Dataset para ingerir datos de fuentes de datos incorporadas y externas, aplicar funciones incorporadas y personalizadas, y utilizar Spark SQL. Estos capítulos constituyen la base para los capítulos posteriores, incorporando todos los cambios más recientes de Spark 3.0 cuando proceda.
- Capítulo 7, "Optimizar y ajustar las aplicaciones Spark"
-
Te proporciona las buenas prácticas para ajustar, optimizar, depurar e inspeccionar tus aplicaciones Spark a través de la interfaz de usuario de Spark, así como detalles sobre las configuraciones que puedes ajustar para aumentar el rendimiento.
- Capítulo 8, "Streaming estructurado"
-
Te guía a través de la evolución del motor Spark Streaming y del modelo de programación Structured Streaming. Examina la anatomía de una consulta de flujo típica y analiza las distintas formas de transformar los datos de flujo -agregaciones de estado, uniones de flujo y agregación arbitraria de estado-, a la vez que proporciona orientación sobre cómo diseñar consultas de flujo de alto rendimiento.
- Capítulo 9, "Construir lagos de datos fiables con Apache Spark"
-
Analiza tres soluciones de almacenamiento en formato tabla de código abierto, como parte del ecosistema Spark, que emplean Apache Spark para construir lagos de datos fiables con garantías transaccionales. Debido a la estrecha integración de Delta Lake con Spark tanto para cargas de trabajo batch como streaming, nos centramos en esa solución y exploramos cómo facilita un nuevo paradigma en la gestión de datos, el lakehouse.
- Capítulo 10, "Aprendizaje automático con MLlib"
-
Presenta MLlib, la biblioteca de aprendizaje automático distribuido para Spark, y te guía a través de un ejemplo de principio a fin sobre cómo construir una canalización de aprendizaje automático, incluyendo temas como la ingeniería de características, el ajuste de hiperparámetros, las métricas de evaluación y el guardado y carga de modelos.
- Capítulo 11, "Gestión, Implementación y Escalado de Canalizaciones de Aprendizaje Automático con Apache Spark"
-
Cubre cómo seguir y gestionar tus modelos MLlib con MLflow, compara y contrasta diferentes opciones de implementación de modelos, y explora cómo aprovechar Spark para modelos no MLlib para la inferencia distribuida de modelos, la ingeniería de características y/o el ajuste de hiperparámetros.
- Capítulo 12, "Epílogo: Apache Spark 3.0"
-
El epílogo destaca las características y cambios notables de Spark 3.0. Aunque la gama completa de mejoras y funciones es demasiado extensa para caber en un solo capítulo, destacamos los cambios más importantes que debes conocer y te recomendamos que consultes las notas de la versión cuando Spark 3.0 se publique oficialmente.
A lo largo de estos capítulos, hemos incorporado o señalado las características de Spark 3.0 cuando ha sido necesario y hemos probado todos los ejemplos de código y cuadernos con Spark 3.0.0-preview2.
Cómo utilizar los ejemplos de código
Los ejemplos de código del libro van desde breves fragmentos hasta aplicaciones Spark completas y cuadernos de principio a fin, en Scala, Python, SQL y, cuando es necesario, Java.
Mientras que algunos fragmentos breves de código de un capítulo son autocontenidos y pueden copiarse y pegarse para ejecutarlos en un intérprete de comandos Spark (pyspark
o spark-shell
), otros son fragmentos de aplicaciones Spark independientes o cuadernos de extremo a extremo. Para ejecutar aplicaciones Spark independientes en Scala, Python o Java, lee las instrucciones de los archivos README de los respectivos capítulos en el repositorio GitHub de este libro.
En cuanto a los cuadernos, para ejecutarlos tendrás que registrarte para obtener una cuenta gratuita de Databricks Community Edition. En el LÉEME detallamos cómo importar los cuadernos y crear un clúster utilizando Spark 3.0.
Software y configuración utilizados
La mayor parte del código de este libro y de los cuadernos que lo acompañan se ha escrito y probado con Apache Spark 3.0.0-preview2, que estaba a nuestra disposición cuando escribimos los últimos capítulos.
Cuando se publique este libro, Apache Spark 3.0 habrá sido lanzado y estará disponible para la comunidad para su uso general. Te recomendamos que descargues y utilices la versión oficial con las siguientes configuraciones para tu sistema operativo:
-
Apache Spark 3.0 (prediseñado para Apache Hadoop 2.7)
-
Kit de desarrollo de Java (JDK) 1.8.0
Si pretendes utilizar sólo Python, entonces puedes simplemente ejecutar pip install pyspark
.
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
- Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
- Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Constant width bold
- Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.
Constant width italic
- Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Nota
Este elemento significa una nota general.
Utilizar ejemplos de código
Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a bookquestions@oreilly.com.
Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.
Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Aprendiendo Spark, 2ª Edición, por Jules S. Damji, Brooke Wenig, Tathagata Das y Denny Lee. Copyright 2020 Databricks, Inc., 978-1-492-05004-9".
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Aprendizaje en línea O'Reilly
Nota
Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.
Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.
Cómo contactar con nosotros
Dirige tus comentarios y preguntas sobre este libro a la editorial:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-829-0515 (internacional o local)
- 707-829-0104 (fax)
Visita nuestra página web para este libro, donde incluimos erratas, ejemplos y cualquier información adicional, en https://oreil.ly/LearningSpark2.
Envía un correo electrónico a bookquestions@oreilly.com para comentar o hacer preguntas técnicas sobre este libro.
Para obtener noticias e información sobre nuestros libros y cursos, visita http://oreilly.com.
Encuéntranos en Facebook: http://facebook.com/oreilly
Síguenos en Twitter: http://twitter.com/oreillymedia
Míranos en YouTube: http://www.youtube.com/oreillymedia
Agradecimientos
Este proyecto ha sido realmente un esfuerzo de equipo en el que han participado muchas personas, y sin su apoyo y sus comentarios no habríamos podido terminar este libro, especialmente en los tiempos actuales de COVID-19 sin precedentes.
En primer lugar, queremos dar las gracias a nuestra empresa, Databricks, por apoyarnos y asignarnos tiempo dedicado como parte de nuestro trabajo para terminar este libro. En particular, queremos dar las gracias a Matei Zaharia, Reynold Xin, Ali Ghodsi, Ryan Boyd y Rick Schultz por animarnos a escribir la segunda edición.
En segundo lugar, queremos dar las gracias a nuestros revisores técnicos: Adam Breindel, Amir Issaei, Jacek Laskowski, Sean Owen y Vishwanath Subramanian. Sus comentarios diligentes y constructivos, informados por su experiencia técnica en la comunidad y el punto de vista de la industria, han hecho de este libro lo que es: un valioso recurso para aprender Spark.
Además de los revisores formales del libro, recibimos comentarios inestimables de otras personas conocedoras de temas y secciones concretas de los capítulos, y queremos agradecer sus aportaciones. Muchas gracias a: Conor Murphy, Hyukjin Kwon, Maryann Xue, Niall Turbitt, Wenchen Fan, Xiao Li y Yuanjian Li.
Por último, nos gustaría dar las gracias a nuestros colegas de Databricks (por su tolerancia cuando incumplimos o descuidamos los plazos del proyecto), a nuestras familias y seres queridos (por su paciencia y empatía mientras escribíamos a primera hora del día o hasta altas horas de la noche en días laborables y fines de semana), y a toda la comunidad Spark de código abierto. Sin sus continuas contribuciones, Spark no estaría donde está hoy, y los autores no tendríamos mucho sobre lo que escribir.
¡Gracias a todos!
Get Aprender Spark, 2ª Edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.