The post Lista de Presupuestos Residencial Los Girasoles appeared first on El Blog de Jose.
]]>Presupuesto Asiem -> Descargar
Presupuesto J A García -> Descargar
Presupuesto ASESORES MCM -> Descargar
The post Lista de Presupuestos Residencial Los Girasoles appeared first on El Blog de Jose.
]]>The post Cómo aprobar la certificación Databricks Data Analyst Associate appeared first on El Blog de Jose.
]]>El examen
Consta de 45 preguntas de selección multiple a resolver en 90 minutos
El mínimo para aprobar es un 70% lo cual se corresponde con 32 preguntas respondidas correctamente
Objetivos a cubrir en el examen
Siendo más específicos, la cualificación minima del candidato para aprobar debería ser la siguiente:
Mi opinión acerca del examen
Para empezar al examen le daría una ponderación de 5-5,5 sobre 10, es decir, me pareció un poco más sencillo que el Data Engineer Associate, eso si he de decir que tener conocimientos en el anteriormente mencionado me ha ayudado mucho a afrontar las preguntas de este examen. Dentro de las preguntas claves y conceptos a dominar de cara al examen recomiendo:
Material de estudio:
Espero que este resumen les pueda ser de ayuda para aprobar el examen. Ahora es tu turno y cuéntanos cuál de todas las certificaciones de Databricks te llama la atención y una vez aprobada la Data Analyst Associate cuál será tu siguiente reto? La Data Analyst Professional, La Data Engineer Associate o la ML Practitioner.
The post Cómo aprobar la certificación Databricks Data Analyst Associate appeared first on El Blog de Jose.
]]>The post Cómo aprobar la certificación Databricks Data Engineer Associate appeared first on El Blog de Jose.
]]>El examen
Consta de 45 preguntas de selección multiple a resolver en 90 minutos
El mínimo para aprobar es un 70% lo cual se corresponde con 32 preguntas respondidas correctamente
Objetivos a cubrir en el examen
Se deben dominar los siguientes tópicos:
Siendo más específicos como detalla la página, la cualificación minima del candidato debería ser la siguiente
Mi opinión acerca del examen
El examen es de dificultad media y requiere conocimientos de:
Spark (batch & streaming), Delta tables, Delta Live Tables, Permisos, Jobs, pipelines y dominar el concepto de Data Lakehouse.
Las preguntas que me aparecieron en el examen fueron del tipo:
Por último mencionar que en mi caso salieron varias preguntas acerca del SQL EndPoint y de la definición de pipelines.
Material de estudio:
Espero que este resumen les pueda ser de ayuda para aprobar el examen. Ahora es tu turno y cuéntanos cuál de todas las certificaciones de Databricks te llama la atención y una vez aprobada la Data Engineer Associate cuál será tu siguiente reto? La Data Engineer Professional, La Data Analyst Associate o la ML Practitioner.
The post Cómo aprobar la certificación Databricks Data Engineer Associate appeared first on El Blog de Jose.
]]>The post Cómo aprobar la certificación Databricks Spark 3.0 appeared first on El Blog de Jose.
]]>El examen
Las características del examen son las siguientes:
OJO: No olvides días previos al examen entrar a la Web del examen y culminar el alta, que consiste en un software que reconoce tu rostro. NO LO DEJES PARA ÚLTIMO MOMENTO.
El examen consta de únicamente preguntas de selección múltiple, aunque eso si, no todas van de conceptos, las preguntas dada mi experiencia se componen de:
Las preguntas
Tal cual como lo indica la página dedicada a la certificación el contenido a evaluar es:
spark._.format(_).options(header='true') ._('zipcodes.csv')
Donde las opciones a escoger serían:
La plataforma te permite marcar preguntas para ser revisadas más adelante, cosa que yo aconsejo utilizar, hacer una pasada rápida por las preguntas, selecciona una respuesta y sobre aquellas que se tenga una mínima duda sencillamente se marca y le das una revisión, de esta forma tendrás oportunidad de responder todas las preguntas y revisar en 2 o hasta 3 ocasiones todas las preguntas que hayas dejado marcadas.
Finalizado el examen
Tan pronto finalizas el examen podrás observar por pantalla una valoración no definitiva del resultado de la prueba y minutos después recibirás un correo con la nota, donde ya te indican si aprobaste (o no, pero si sigues mi receta aprobarás) y luego pasados unos 7 días hábiles o quizás un poco menos recibes tu certificado por correo.
Receta para aprobar el examen
Ahora es tu turno, te animas a afrontar este reto, tienes alguna otra certificación en mente, estás indeciso en cual certificación de Spark tomar o si por el contrario ya presentaste está o alguna otra certificación cuéntanos qué tal te fue.
The post Cómo aprobar la certificación Databricks Spark 3.0 appeared first on El Blog de Jose.
]]>The post Certificación Databricks Spark 3.0 appeared first on El Blog de Jose.
]]>Insisto me encantan las certificaciones pero porque para mí significan plantearme un reto y demostrarme a mí mismo que soy capaz de seguir aprendiendo, que si puedo aprender un nuevo lenguaje, que todavía tengo la fuerza y las ganas de superación para actualizarme en alguna tecnología en especial. Con el pasar del tiempo les confieso que cada vez se me ha hecho más difícil el intentar plantearme un reto de este tipo, por razones como la escasez de tiempo, la cantidad de trabajo, o el aprender en un marco muy estricto, pero creo que ya ha llegado la hora de proponerme otro de esos retos y que ya les contaré si lo consigo o no y es preparar la certificación Databricks Certified Associate Developer for Apache Spark 3.0. Por qué esta certificación y no otra:
A su vez una razón de peso para mí es que al presentarla y aprobarla, esto motive a la gente que trabaja conmigo para que a su vez sientan ese deseo por aprender y especializarse e incluso no comentan los mismos errores que yo y que al menos ya cuenten con algo de material de apoyo para empezar.
El material de referencia que utilizaré para prepararme serán los libros:
A su vez sigo el blog de Databricks que cada tanto comparte información importante sobre todo referente a cómo funciona Spark.
Por último he comenzado a crear una serie de notebooks con ejemplos muy simples (tanto en Scala como Python) que comparto con todos intentando abarcar todo el contenido.
Aquí les dejo el enlace espero que sea de ayuda y les motive a aprender y afrontar esta certificación e incluso les motive a seguir. Este mes es mi cumpleaños y dudo que me dé una paliza repasando pero quizás (y por eso lo comparto para crear una especie de compromiso) me disponga a presentar en abril y espero poder aprobar a la primera.
The post Certificación Databricks Spark 3.0 appeared first on El Blog de Jose.
]]>The post Primeros pasos con PySpark y PyCharm appeared first on El Blog de Jose.
]]>Actualmente Spark está en mi día a día ya sea a modo desarrollo programando en Scala, razón por la cual uso continuamente IntelliJ sino también en la formación tanto en Scala como en Python, hasta hace poco para las formaciones de PySpark (entiéndase Spark con el API de Python) utilizaba los Jupyter notebooks (e incluso la plataforma de Databricks pero eso da para otra entrada en el blog) pero estaba la curiosidad que poco a poco se ha convertido en una necesidad de contar con una herramienta más potente que permitiese hacer debug, que integrase Git, hacer markdown, autocompletado de código, permita estandarizar el código, etc. Si lo meditan un poco casi todo de una forma u otra se puede alcanzar con los Jupyter notebooks, pero lo que cambia es la forma de programación, ya que con un IDE sería programación al uso (sea esta funcional o no), mientras que con los notebooks sería programación literaria, es decir, un entorno más enfocado a la explicación y documentación del código y hoy en día ampliamente utilizado por científicos de datos (data scientists), mientras que el primero (IDE) más utilizado por los ingenieros de datos (data engineer).
Finalmente nos hemos puesto manos a la obra en probar varios IDEs en el equipo y yo no quise desperdiciar la oportunidad de trastear con PyCharm y hacer mis primeras pruebas de programación de PySpark y es lo que comparto ahora con ustedes.
Antes que nada hay ciertos requisitos previos:
Está vez no les voy a mostrar como instalar Spark, ya que hay muchísimas fuentes que nos explican como hacerlo pero en cualquier caso hay que tener claro que es necesario Java 8 (al menos) y declarar las variables de entorno SPARK_HOME y HADOOP_HOME, la primera apuntando a la ruta de la instalación de Spark y la segunda a la ruta base de donde se instalará el winutils.
El otro requisito es Python, hay distintas formas de instalar python que tampoco explicaré aquí, pero resumiendo puede ser instalando el lenguaje (y luego pip si se desea o es necesario instalar otra dependencia) o mediante anaconda, yo he elegido este último ya que es un entorno que trae consigo ya instalado jupyter notebooks además de otras herramientas, en cualquier caso si alguien tiene cierta curiosidad de cuando instalar pip o anaconda les dejo este articulo de stackoverflow que no tiene desperdicio.
Ya entrando en materia, el primer paso es descargar e instalar PyCharm (este podría incluso llegar a instalarse desde Anaconda, yo preferí descargarla para contar con la versión mas reciente). Yo lo hice con la versión community
Una vez instalado y ejecutado por primera vez, crearemos un nuevo proyecto y deberemos especificar nuestro entorno (environment), yo soy de los que prefiere crear un entorno por proyecto debido a que cada proyecto python (en general) puede ser diferente en cuanto a dependencias características, etc. llegando incluso a diferir la versión de python entre 2 y 3. A su vez dejo marcada la opción de que genere un main.py tal cual como aparece en las imágenes.
El IDE nos genera un main.py que hace de esqueleto de la aplicación, lo editamos con un trozo de código que genera un DataFrame y mostrará parte de su contenido mediante la invocación del método show quedando de esta manera
# This is a sample Python script.
# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint.
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
print_hi('PyCharm')
try:
#import findspark;
#findspark.init()
from pyspark import SparkContext, SparkConf
except ImportError:
raise ImportError("Unable to find pyspark -- are you sure SPARK_HOME is set?")
import random
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("PyCharm Example") \
.getOrCreate()
mi_rango = spark.range(1000).toDF("numero")
mi_rango.show()
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
Si este código tratamos de ejecutarlo (Menu Run->Run main), este falla. Esto se debe a que es necesario incluir las dependencias propias de Spark, por lo cual es necesario incluir la carpeta python de la instalación de Spark (sería $SPARK_HOME/python) y además la carpeta py4j ubicada en $SPARK_HOME/python/lib/py4j-xxx-.zip
El añadir py4j es una de las alternativas que existen para poder hacer ejecuciones en local del código. Otra alternativa es instalar py4j como dependencia del entorno (environment) y de hecho la misma herramienta te ofrece la alternativa como se refleja en la imagen a continuación
Ahora podemos darnos cuenta que ya no se resaltan (en rojo) parte del código. Procedemos de nuevo a ejecutar el código y nos damos cuenta que este se ejecuta exitosamente.
Ya estamos a punto de terminar pero falta un pequeño detalle, el IDE todavía nos marca unos warnings, por ejemplo el código comentado y esto se debe a que por defecto PyCharm ya aplica PEP8 como estándar al código y por ende todo aquello que no cumpla con el estándar definido será resaltado para su corrección como se muestra en la imagen.
Incluso si hacemos clic en el símbolo de warning (cuidado) ubicado en la parte superior derecha, nos listará las cosas a mejorar que cumplan con el estándar. Una vez listado los warnings procedo mejorar el código quedando de la siguiente manera
Finalmente el código (aunque es muy simple) ya cumple con el estándar PEP8 y nos ha resultado relativamente sencillo poder ejecutar nuestro código desde el mismo IDE, además la herramienta nos permite sin salir de ella acceder a linea de comandos, hacer control total de Git (pull, push, commit, comparación entre ramas y más), poner breakpoints y realizar debug del código. Otra cosa a comentar es que aun cuando no hayamos definido el SPARK_HOME (cosa que no recomiendo) y el HADOOP_HOME, estas variables podemos definirlas antes de ejecutar el código mediante Edit Configurations.
Ha sido un ejemplo muy simple pero creo que refleja parte del potencial de la herramienta, aunque no todos son buenas noticias, por ejemplo la versión community no permite abrir y ejecutar jupyter notebooks cosa que si permite la versión de pago, llegando incluso a permitir la ejecución celda a celda y esta es una característica muy deseada que algunas herramientas si lo permiten como es el caso de VSCode, sin embargo esto no empaña para nada las capacidades que tiene y puede aportarnos de cara a la productividad.
The post Primeros pasos con PySpark y PyCharm appeared first on El Blog de Jose.
]]>The post Uso del SHOW PARTITIONS en Spark appeared first on El Blog de Jose.
]]>Como seguramente muchos de ustedes saben si invocamos un SHOW PARTITIONS en spark por ejemplo en la spark-shell, esta nos devuelve un DataFrame con una única columna, como el siguiente ejemplo:
+--------------------------------------------------------------------------+ |partition | +--------------------------------------------------------------------------+ |country=VENEZUELA/state=BOLIVAR/city=GUAYANA/dt=20191012/hour=1020 | |country=VENEZUELA/state=DISTRITOCAPITAL/city=CARACAS/dt=20191012/hour=1200| |country=VENEZUELA/state=CARABOBO/city=VALENCIA/dt=20191012/hour=1700 | |country=VENEZUELA/state=CARABOBO/city=VALENCIA/dt=20191012/hour=1750 | |country=VENEZUELA/state=MERIDA/city=MERIDA/dt=20191012/hour=1400 | +--------------------------------------------------------------------------+
Con mi método lo que hago es transformar el DataFrame original en uno formateado donde cada variable de particionado es una columna. A continuación el método y el que sería el DataFrame resultante
+------------------------------------------------+ |country |state |city |dt |hour| +------------------------------------------------+ |VENEZUELA|BOLIVAR |GUAYANA |20191012|1020| |VENEZUELA|DISTRITOCAPITAL|CARACAS |20191012|1200| |VENEZUELA|CARABOBO |VALENCIA|20191012|1700| |VENEZUELA|CARABOBO |VALENCIA|20191012|1750| |VENEZUELA|MERIDA |MERIDA |20191012|1400| +------------------------------------------------+
Ahora ustedes se preguntarán y que hay de fascinante o interesante en este método. La verdad que el método en sí aporta poco es sencillamente una simple transformación pero para mí la magia reside en para que lo utilizo y es lo que les quiero contar.
Imaginen que la tabla que posee las 5 variables de partición (ni discutamos si es acertado poseer 5 variables de particionamiento) posee un sin fin de particiones y que a su vez para una misma ciudad en una misma fecha hay varias particiones por hora (como aparece en el ejemplo para la ciudad de Valencia) y cada partición a su vez tiene muchos registros. Con este supuesto si quisiéramos hacer una consulta para obtener la máxima partición (la más reciente) para una fecha, ciudad, estado y país en especifico podríamos llegar a tener problemas de TimeOut o SocketTimeOut ya que:
* El cluster se vería exigido intentando trabajar sobre las particiones pertinentes (debido al gran número de particiones).
* Una vez obtenidas las particiones cargar los datos desde HDFS y recorrer de forma innecesaria un conjunto de datos requiriendo mucho más memoria de la necesaria.
¿Recorrer de forma innecesaria?
Si, ya que recorreríamos un conjunto de registros donde muchos de esto compartirán el valor de la columna «hora» (partición) y apegándonoslos al ejemplo de arriba (la ciudad de Valencia) realmente los valores posibles serían 2:
* 1700
* 1750
Solución: Pues al obtener el DataFrame de particiones, si posteriormente filtramos por país, estado, ciudad y día solo nos quedarían 2 registros para el campo hora y sencillamente tendría que hallar el máximo valor de 2 registros en vez de tener que cargar datos de HDFS e iterar sobre todos estos.
¿Mucha más memoria de la necesaria?
Si, ya que al hacer un SHOW PARTITIONS, nosotros interactuamos con el metatstore y los metadatos en vez de trabajar con todos los datos de HDFS con todo lo que eso implica en cuanto a latencia, debido a la necesidad de ir a disco, etc.
¿Existe alguna otra ventaja de trabajar con el metastore?
Si, por ejemplo para hallar la máxima partición, trabajando únicamente con el DataFrame de particiones y una vez hallada la partición idónea, digamos que la más reciente, entonces construyo la consulta (muy especifica) indicando los valores de la partición deseada evitando esos errores de TimeOut haciendo uso eficiente de los recursos. De hecho yo lo que hecho es construir un WHERE dinámico (quizás lo comparto en la próxima entrada) a partir del DataFrame de particiones filtrado.
¿Se te ocurre otra ventaja de utilizar un método como este e interactuar con el metastore? ¿Habías hecho algo similar para tener mejoras de rendimiento y uso eficiente de recursos?
Espero que les sea de utilidad.
The post Uso del SHOW PARTITIONS en Spark appeared first on El Blog de Jose.
]]>The post Aprendizaje en tiempo de cuarentena appeared first on El Blog de Jose.
]]>De lo último es que quiero compartirles un poco. El año pasado fui durante un pequeño periodo autónomo y en dicho periodo trabajé con un grupo de gente de distintos lugares del mundo que estaban diseñando e implementando una nueva cryptomoneda en esa aventura una de las tareas a las que me dediqué fue en realizar un blockchain explorer, para ello me decanté por elixir y phoenix solo conté con 1 mes para llevar a cabo esa prueba de concepto y en dicho periodo pude hacer una versión alfa (muy muy cruda) de un blockchain explorer (está en mi GitHub) y realmente después de 4 años volví a disfrutar del desarrollo Web, debido a la premura del proyecto no hubo oportunidad de seguir desarrollando el explorador y tuvimos que acudir a Github y reutilizar uno existente (elaborado con NodeJS). La sintaxis del lenguaje y las características del framework (elaborado con cierta similitud a RoR) resultaron en un mundo totalmente nuevo para mí pero de nuevo insisto disfruté ese mes. Ahora bien de vuelta al 2020, al ocurrir todo esto de la cuarentena pasadas las primera y segunda semana me empecé a dar cuenta que contaba con un poquito de más tiempo de lo habitual (o será mejor decir que me falta menos tiempo que de constumbre?) teniendo oportunidad de leer algunos artículos que tenía pendientes, charlas, etc. y fue entonces cuando me plantee ¿Y si retomo de nuevo la lectura de los libros de phoenix y elixir? y si culmino el blockchain explorer? y si me hago una API en elixir/phoenix con varios nodos y me hago un benchmark con spring-boot, quarkus y otros. Es así que hace quizás unas 2 semanas empecé de nuevo a leer de phoenix y a hacer todos los ejemplos del libro, a ver vídeos de su nuevo componente liveView (no dejen de buscarlo por Internet se ve fantástico, una especie de Ajax mediante websockets, sin tener uno que hacer el javascript), también estuve investigando acerca de herramientas de maquetación Web y empecé a practicar un poco con Adobe XD para conocerlo y darle un vistazo a otras herramientas como Overflow (esta particularmente me encantó y puede ser un complemento de Adobe XD), en fin, ha sido un mes y medio difícil y para muchos incluso triste y trágico, pero los informáticos debemos agradecer que muchos de nosotros hemos podido seguir trabajando desde nuestros hogares, pero sobre todo lo que quiero transmitirles es que no debemos dejar de investigar, de leer, de probar, dentro de todo lo malo aprovechar este tiempo para seguir creciendo a nivel personal y profesional aprendiendo nuevas herramientas, nuevos idiomas, nuevos lenguajes de programación, nuevas metodologías, preparar una certificación, aprovechando que incluso muchas plataformas están ofreciendo cursos gratuitos, lease coursera, edx, Udacity, Udemy, pragmaticstudio.com (curso de phoenix liveView) entre muchas otras, pero recuerden, «crecer», seguramente tomará un tiempo para que volvamos a ser los mismos (sino es que esto genere un cambio para siempre en nosotros), pero también trabajemos en no ser los mismos (profesionalmente hablando) y volver siendo perfiles más completos, mas profesionales y muy muy muy por encima de todos más humanos.
The post Aprendizaje en tiempo de cuarentena appeared first on El Blog de Jose.
]]>The post Spark Scala con Maven en IntelliJ appeared first on El Blog de Jose.
]]>Pues he decidido crear un esqueleto de proyecto (el cual espero poder ir evolucionando y mejorarlo) que seguramente no es la mejor pero desde mi humilde punto de vista es funcional.
Configurar el IDE
Lo primero antes que nada es instalar el jsdk (1.8 como mínimo), luego en la instalación o inmediatamente después es asegurarnos de contar con los plugins de Maven y Scala, para ello en la ventana de inicio vamos a los plugins.
Buscamos el plugin de Scala para verificar que este instalado si no lo está lo instalamos y luego en la misma ventana en la parte superior junto a Marketplace hacemos clic en installed y verificamos que el plugin de maven por defecto este habilitado.
Creamos el proyecto
Seleccionamos la opción de crear un nuevo proyecto.
Acto seguido seleccionamos la opción de proyecto maven y marcamos la opción de Create from archetype. Seleccionamos el archetype net.alchim31.maven:scala-archetype-simple y pulsamos el botón «Next». Si el archetype no existe pulsamos el botón de Añadir Archetype (Add Archetype) cumplimentamos la información con los siguientes datos:
GroupId: net.alchim31.maven
ArtifactId: scala-archetype-simple
Version: 1.7
Una vez añadido lo seleccionamos y como habíamos indicado antes pulsamos el botón «Next».
Inmediatamente después le daremos nombre a nuestro proyecto y si queremos ser más específicos indicamos el GroupId, ArtifactId y versión de nuestro proyecto (OJO esto último es opcional), pulsamos «Next» y por último en la ventana resumen pulsamos «Finish».
Lo primero que deberemos hacer para que nos facilite la tarea será habilitar la autoimportación de las dependencias maven como señalamos en la imagen.
El construir el proyecto a partir de un archetype (arquetipo) maven consiste en armar el esqueleto de un proyecto a partir de una plantilla definiendo una estructura minima por defecto, por lo cual veremos un fichero pom.xml (gestión de dependencias maven) con algunas dependencias y una estructura de carpetas para el código fuente y pruebas unitarias, con ficheros incluidos.
Aprovechamos de dar un vistazo a la clase App y a las pruebas unitarias que por defecto nos añade al proyecto e incluso podemos compilar el proyecto para contrastar que todo está de maravilla y para ello solamente necesitamos hacer clic en la pestaña maven ubicado en la parte derecha, donde aparece el nombre de nuestro proyecto desplegar lifecycle y hacer doble clic en compile y esto iniciará el proceso de compilación terminando exitosamente.
Añadimos dependencias
Ya estamos llegando al final, ahora lo que haremos será añadir al fichero pom.xml las dependencias spark que utilizaremos para este ejemplo. Empezaremos por editar las propiedades quedando estas así:
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <encoding>UTF-8</encoding> <scala.version>2.12.6</scala.version> <scala.compat.version>2.12</scala.compat.version> <spec2.version>4.2.0</spec2.version> <spark.version>2.4.5</spark.version> </properties>
Añadimos las dependencias de spark al conjunto de dependencias existentes
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_${scala.compat.version}</artifactId> <version>${spark.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_${scala.compat.version}</artifactId> <version>${spark.version}</version> <scope>provided</scope> </dependency>
Por último modificaremos nuestra clase App quedando esta así:
package com.josedeveloper import org.apache.spark.rdd.RDD import org.apache.spark.sql.SparkSession /** * @author ${user.name} */ object App { def main(args : Array[String]) { val spark:SparkSession = SparkSession.builder().master("local[1]") .appName("SparkByExamples.com") .getOrCreate() val rdd:RDD[Int] = spark.sparkContext.parallelize(List(1,2,3,4,5)) val rddCollect:Array[Int] = rdd.collect() println("Number of Partitions: "+rdd.getNumPartitions) println("Action: First element: "+rdd.first()) println("Action: RDD converted to Array[Int] : ") rddCollect.foreach(println) } }
Para de nuevo volver a compilar el proyecto, que deberá culminar exitosamente.
Ejecución
La forma que indicaremos para la ejecución de los jobs desde IntelliJ no es la mejor pero es una forma sencilla y funcional para probar cosas y sobre todo para quien comienza a hacer tests sin necesidad de empaquetar y crear un jar y desplegarlo en una máquina virtual o en un cluster. ¿Cuál sería entonces la mejor forma? A mi modo de ver las cosas la mejor forma sería mediante prueba unitarias y de integración donde podamos probar todo el job de inicio a fin y para explicarles como ya tengo en mente preparar otro post paso a paso indicando como hacerlo y las herramientas para lograrlo. Continuando con la configuración de la ejecución, si sencillamente con botón derecho del ratón hacemos clic en Run ‘App’ nos arrojará el error.
Exception in thread «main» java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
at com.josedeveloper.App$.main(App.scala:13)
at com.josedeveloper.App.main(App.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
… 2 more
El error se debe a que no encuentra las clases con las que fue compilado previamente y eso se debe a que las dependencias de spark las hemos añadido con el alcance «provided».
¿Por qué provided? Debido a que en un entorno empresarial esas dependencias no debemos agregarlas ya que las provee la infraestructura Big Data de la empresa.
Entonces para solventar el error sencillamente debemos ir al menu «Run» y hacemos clic en «Edit Configurations» y allí marcamos la opción de incluir dependencias provided (Include dependencies with «Provided» scope).
Hecho eso volvemos a ejecutar la clase App y veremos como si se logra ejecutar la aplicación. Sin más espero que les haya servido de ayuda y les comento que mi próximo paso será crear un archetype (arquetipo) y a su vez explicarles como hacerlo para que cada quien pueda construir uno acorde con las necesidades de su organización y así dotamos de más profesionalidad y agilidad nuestro trabajo y evitamos el copiar+pegar donde en ocasiones terminamos añadiendo mas dependencias y plugins innecesarios así como también arrastrando problemas y errores (de haberlos).
Aquí les dejo el video
Repo GitHub
The post Spark Scala con Maven en IntelliJ appeared first on El Blog de Jose.
]]>The post Receta para aprobar AWS Certified Big Data Specialty appeared first on El Blog de Jose.
]]>Hola a todos, muchísimo tiempo sin escribir y no es que no quiera sino que la vida con hijos lo convierte en una tarea en mi caso algo difícil de compaginar. Hoy después de año y medio quiero compartir mi receta para aprobar la certificación AWS Certified Big Data – Specialty.
No les voy a mentir es una certificación complicada quizás un poco más complicada que la AWS Certified Solution Architect – Associate pero lejos de ser imposible, su complejidad desde mi punto de vista radica en que hay que tener un conocimiento amplio no solo en los servicios de AWS sino de frameworks y herramientas utilizadas hoy en día en Big Data.
La AWS Certified Big Data – Specialty es una certificación que puede tomarse de buenas a primeras, es decir, no tiene como requisito el haber aprobado previamente alguna otra certificación aunque desde la misma página de la certificación nos hacen unas sugerencias que desde mi punto de vista son con razón y son las siguientes y cito:
El examen de certificación dura 170 minutos y tiene un costo de 300$ y está disponible únicamente en ingles, japonés, coreano y chino.
Vamos al gramo ¿cómo preparé el examen? Bueno para esto compré 2 cursos ambos muy buenos (excelentes) y amplios y abarcan diría que más de un 90% del contenido a evaluar y casi todos los servicios de amazon, quizás queda alguno por fuera como por ejemplo Storage Gateway, Cloudfront, Elastic Load Balancer, EC2 pero es aquí donde toma relevancia el haber aprobado previamente otra certificación lo cual nos «aseguraría» tener conocimientos en esos otros servicios. Los cursos en cuestión son:
También hice algún curso de la página de aws.traning donde desde AWS nos plantean distintos learning path (caminos de aprendizaje?)
Otra cosa que hice fue redactar mi propio material y para ello revise las F.A.Q. de todos los servicios relacionados con la certificación y los limites y con toda esa información redacte mi chuleta (utilicé evernote) la cual iba enriqueciendo mediante aspectos importantes que veía en los cursos antes indicados y de interrogantes que me iba planteando en el camino y que iba dándole solución luego al comprobarlo de forma practica o investigar en la misma documentación de AWS. ¿Qué servicios mirar? les diría que los principales son: Redshift, EMR, Kinesis (streams, firehose y analytics), DynamoDB, S3, Glacier, Snowball, RDS, DMS, Machine Learning, SageMaker, Athena, Elasticsearch service, IoT, CloudTrial, CloudWatch, Lambda y Glue. Además de estos puede que salgan preguntas que involucren SQS, SNS, EC2 (tipos de instancias), Storage Gateway, Direct Connect, rekognition, polly y lex.
También aproveche de ver varios vídeos desde los canales de youtube:
Lo interesante de ambos canales es que plantean solución a distintos escenarios mediante la combinación y uso de distintos servicios de AWS lo que nos permite tener una perspectiva real de como afrontar e integrar muchos de estos servicios, casos de uso, buenas practicas entre otras cosas y el último de los canales también posee los vídeos de las sesiones re:Invent de los años 2017, 2018 y aunque alguno de los videos puede llegar a durar 1 hora, pues a mí que lo que mas me hace falta es el tiempo lo que hacía era verlos a velocidad de 1.25X (esta técnica también la aplicaba para ver los vídeos de Udemy y acloud.guru).
Hice el test de 10 preguntas de la certificación que se puede encontrar en el siguiente enlace. De antemano les digo que no se dejen intimidar por este examen, estas 10 preguntas desde mi punto de vista son muy difíciles y la realidad es que la mayoría de preguntas en el examen de certificación ni son tan difíciles ni tan largas. Sin embargo esto me sirvió para profundizar en cuanto a contenidos y sobre todo a plantear una estrategia de cara al examen, la cual se las comentaré más adelante.
Les debo confesar que las preguntas de ejemplo me dejaron un poco tocado así que compre los test prácticos de Whizlabs. Hice el test gratuito y me decidí a comprarlo definitivamente.
¿Cuál fue mi estrategia?
Mi estrategia fue la siguiente. Practicando con los 3 tests de Whizlabs, me propuse intentar resolver las 65 preguntas en un plazo de 60 minutos, es decir, daba una lectura muy rápida a las preguntas y daba una respuesta, de esta manera me aseguraba que todas las preguntas fueran contestadas (el examen no tiene factor de corrección) y todas aquellas preguntas donde me quedara duda (casi todas) las marcaba para su posterior revisión, de esta forma logré poder dedicar mucho tiempo a la revisión de las preguntas.
Finalmente comentarles que el resultado fue positivo, obtuve un 74% en la prueba y con este resultado mi premio la certificación, pero lo más valioso es todo lo aprendido en el camino, ahora mismo conozco muchos de los servicios de amazon y he trasteado con ellos y por supuesto tengo una idea «clara» de como integrarlos para dar soluciones.
TIP final: Existe la opción de obtener 30 minutos más para el examen y consiste en solicitar «Request Exam Accommodations» al programar un examen al no ser el inglés tu lengua materna. He aquí un enlace de como hacerlo.
Espero que mi receta les ayude a conseguir el objetivo de aprobar la certificación y para aquellos que dudan en afrontar este reto, que sepan que es un objetivo alcanzable y que no solo les llevará a aprender mucho sino que desde el punto de vista curricular les aportara valor, tanto es así que existe un grupo de LinkedIn de únicamente personas certificadas por lo cual esos perfiles obtienen mas visibilidad.
Entonces ¿te animas a presentarla? y tu que ya presentaste cuéntanos cual fue tu receta para aprobar la certificación
The post Receta para aprobar AWS Certified Big Data Specialty appeared first on El Blog de Jose.
]]>