<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dani Sancas</title>
    <description>The latest articles on DEV Community by Dani Sancas (@danisancas).</description>
    <link>https://dev.to/danisancas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F30038%2Fd77d1068-4491-4d2e-af00-0e7824e2a574.jpg</url>
      <title>DEV Community: Dani Sancas</title>
      <link>https://dev.to/danisancas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danisancas"/>
    <language>en</language>
    <item>
      <title>Aprendiendo Spark: #2 Hola mundo</title>
      <dc:creator>Dani Sancas</dc:creator>
      <pubDate>Sat, 20 Feb 2021 18:55:29 +0000</pubDate>
      <link>https://dev.to/danisancas/aprendiendo-spark-2-hola-mundo-1ja7</link>
      <guid>https://dev.to/danisancas/aprendiendo-spark-2-hola-mundo-1ja7</guid>
      <description>&lt;p&gt;¡Saludos, camaradas! 👋&lt;/p&gt;

&lt;p&gt;En este artículo vamos a analizar el código del "Hola mundo" que expusimos en el artículo anterior. Antes de nada, vamos a recordarlo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pyspark.sql&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SparkSession&lt;/span&gt;

&lt;span class="c1"&gt;# Iniciamos Spark de manera local
&lt;/span&gt;&lt;span class="n"&gt;spark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SparkSession&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"local[*]"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;appName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hola Mundo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getOrCreate&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Paralelizamos una lista del 0 al 9 (incluido)
# Computamos la suma de los números
# Obtenemos el resultado en una variable
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spark&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sparkContext&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parallelize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Imprimimos el resultado
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"La suma es &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al ejecutarlo a través del IDE o mediante una terminal escribiendo &lt;code&gt;python hola_mundo.py&lt;/code&gt; veremos el siguiente output tras una serie de warnings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;La suma es 45

Process finished with exit code 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vale, muy bonito todo pero, ¿qué es cada cosa?&lt;/p&gt;

&lt;h1&gt;
  
  
  Creando la sesión de Spark
&lt;/h1&gt;

&lt;p&gt;Para continuar vamos a dar una vuelta por nuestro código anotando los tipos de nuestras variables.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Friendly reminder&lt;/strong&gt;: Anotar con tipos en Python es meramente informativo de cara a quien desarrolla el código, no tiene el efecto que pueda tener en lenguajes como Java.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos a anotar con su tipo la variable &lt;code&gt;spark&lt;/code&gt; y también vamos a poner un comentario en cada una de las llamadas encadenadas durante la creación de dicho objeto, para que veamos de qué tipo es cada una.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SparkSession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SparkSession&lt;/span&gt;             &lt;span class="c1"&gt;# SparkSession
&lt;/span&gt;                       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;                 &lt;span class="c1"&gt;# Builder
&lt;/span&gt;                       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"local[*]"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# Builder
&lt;/span&gt;                       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;appName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hola Mundo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# Builder
&lt;/span&gt;                       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getOrCreate&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;          &lt;span class="c1"&gt;# SparkSession
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Todo empieza con la referencia a la clase &lt;code&gt;SparkSession&lt;/code&gt;, ésta nos permite crear un objeto &lt;code&gt;Builder&lt;/code&gt; al cual le iremos indicando qué configuración queremos. &lt;/p&gt;

&lt;p&gt;En primer lugar, indicaremos que el &lt;code&gt;master()&lt;/code&gt; es local usando todos los cores que dispongamos. Esto es típico para hacer pruebas en local, cuando no disponemos de un clúster donde ejecutar código productivo (y de momento nos sirve perfectamente).&lt;/p&gt;

&lt;p&gt;En segundo lugar especificamos el nombre de nuestra ejecución mediante &lt;code&gt;appName()&lt;/code&gt;. Como no podía ser de otra manera, se llama "Hola mundo" (cuánta imaginación, ¿verdad? 🙄).&lt;/p&gt;

&lt;p&gt;Tanto las llamadas a &lt;code&gt;master()&lt;/code&gt; como a &lt;code&gt;appName()&lt;/code&gt; devuelven un objeto Builder, que indica que está a medio construir, nos faltaría un paso más.&lt;/p&gt;

&lt;p&gt;Por último le indicamos a Spark que nos devuelva (en caso de existir) o que nos cree (en caso contrario) una &lt;code&gt;SparkSession&lt;/code&gt; con la que podamos hacer computación distribuida.&lt;/p&gt;

&lt;p&gt;La &lt;code&gt;SparkSession&lt;/code&gt; que nos devuelve la plasmamos en la variable &lt;code&gt;spark&lt;/code&gt; para que podamos utilizarla más adelante. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¡Llegados a este punto ya podemos empezar a hacer computación distribuida!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Pinto y coloreo mis primeras operaciones distribuidas 🤓
&lt;/h1&gt;

&lt;p&gt;Ahora vamos a hacer lo mismo con el segundo bloque de código, anotando el tipo de la variable &lt;code&gt;result&lt;/code&gt; y comentando cada paso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spark&lt;/span&gt;                          &lt;span class="c1"&gt;# SparkSession
&lt;/span&gt;               &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sparkContext&lt;/span&gt;                  &lt;span class="c1"&gt;# SparkContext
&lt;/span&gt;               &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parallelize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;        &lt;span class="c1"&gt;# RDD[int]
&lt;/span&gt;               &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;   &lt;span class="c1"&gt;# int
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primero partimos de la variable &lt;code&gt;spark&lt;/code&gt; creada previamente. Y a partir de ella obtenemos un objeto &lt;code&gt;SparkContext&lt;/code&gt;. Podemos entender este objeto como un &lt;em&gt;helper&lt;/em&gt; de Spark para realizar ciertas maniobras. En este caso nos facilita la creación de un &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD"&gt;RDD&lt;/a&gt; a través de su método &lt;code&gt;parallelize&lt;/code&gt;, que toma una lista como argumento.&lt;/p&gt;

&lt;p&gt;Con &lt;code&gt;parallelize()&lt;/code&gt; tomamos una lista clásica (un array de toda la vida, si queréis verlo así) y crea un RDD a partir de ella, del mismo tipo de la lista. Nosotros le hemos pasado la lista &lt;code&gt;[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;/code&gt; resultante de invocar &lt;code&gt;range(10)&lt;/code&gt;, que es de tipo &lt;code&gt;int&lt;/code&gt;. Por lo tanto el &lt;code&gt;RDD&lt;/code&gt; será también de tipo &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explícame un poco los RDDs, porfa 🥺
&lt;/h2&gt;

&lt;p&gt;Los &lt;code&gt;RDD&lt;/code&gt;s son las unidades básicas de Spark a partir de las cuales podemos hacer computación distribuida. En próximos artículos entraremos en más profundidad, de momento nos sirve pensar en ellos como &lt;strong&gt;listas cuyo contenido está troceado y repartido por diferentes servidores de Spark&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;De esta manera, evitamos cargar a un único servidor con todo el trabajo, ya que todos los nodos que tengamos trabajarán a la par. ¿Y cuál es ese trabajo tan tedioso que va a requerir computación distribuida? 🤔&lt;/p&gt;

&lt;p&gt;¡Nada más y nada menos que la &lt;strong&gt;acción&lt;/strong&gt; &lt;code&gt;reduce()&lt;/code&gt;! 🤩&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Importante: Este &lt;code&gt;reduce()&lt;/code&gt; no es el del módulo &lt;code&gt;functools&lt;/code&gt; pero se comporta parecido, solo que de manera distribuida.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Acción &lt;code&gt;reduce()&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Vale, ¿entonces qué hace exactamente el &lt;code&gt;reduce()&lt;/code&gt; de un &lt;code&gt;RDD&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Esta función coge una lista distribuida (&lt;code&gt;RDD&lt;/code&gt;) y va combinando sus valores mediante la función que le indiquemos. En este caso ha sido una simple función anónima que suma 2 números que le pase &lt;code&gt;reduce()&lt;/code&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si no estáis familiarizados con funciones combinatorias de programación funcional, os dejo &lt;a href="https://www.geeksforgeeks.org/reduce-in-python/"&gt;una breve explicación&lt;/a&gt; del &lt;code&gt;reduce()&lt;/code&gt; del módulo functools. Recordad que no es lo mismo, pero nos sirve para hacernos una idea general de cuál es su mecánica.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Así pues, lo que hará es sumar todos los valores de la lista y devolverá un resultado, un simple &lt;code&gt;int&lt;/code&gt; de toda la vida. En este proceso intervendrían todos nuestros servidores de Spark, comunicándose entre ellos para ir sumando los diferentes valores, hasta tener completada la suma de todos ellos y devolver el resultado.&lt;/p&gt;

&lt;p&gt;Una vez tenemos ese número en nuestro poder, lo imprimimos por pantalla para conocer el resultado de tamaña operación. ¡Buen trabajo! 😎&lt;/p&gt;

&lt;p&gt;Espero que os haya sido útil este artículo. En el próximo hablaremos en más profundidad de las operaciones de Spark, que se dividen en &lt;strong&gt;transformaciones&lt;/strong&gt; y &lt;strong&gt;acciones&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Es muy importante entender bien el rol y efectos que las diferencian, ¡así que os espero en el próximo artículo! 🤗&lt;/p&gt;

&lt;p&gt;¡Nos vemos, equipo! 🙌&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>apachespark</category>
      <category>python</category>
      <category>bigdata</category>
    </item>
    <item>
      <title>Aprendiendo Spark: #1 Introducción</title>
      <dc:creator>Dani Sancas</dc:creator>
      <pubDate>Sat, 06 Feb 2021 19:43:05 +0000</pubDate>
      <link>https://dev.to/danisancas/aprendiendo-spark-1-introduccion-5202</link>
      <guid>https://dev.to/danisancas/aprendiendo-spark-1-introduccion-5202</guid>
      <description>&lt;p&gt;¡Saludos, camaradas! 👋&lt;/p&gt;

&lt;p&gt;En esta serie de artículos entraremos en el mundillo de &lt;a href="https://spark.apache.org/"&gt;Apache Spark&lt;/a&gt;, el framework por excelencia de computación distribuida desde hace ya unos años.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Qué es Apache Spark? 💥
&lt;/h1&gt;

&lt;p&gt;Es un framework de computación distribuida escrito en &lt;code&gt;Scala&lt;/code&gt;, que posee APIs en otros lenguajes como &lt;code&gt;Python&lt;/code&gt;, &lt;code&gt;Java&lt;/code&gt; y &lt;code&gt;R&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En esta serie de tutoriales escribiremos código en &lt;code&gt;Python&lt;/code&gt; por ser un lenguaje más popular que &lt;code&gt;Scala&lt;/code&gt;, y por ser el lenguaje con el que trabajo habitualmente desde hace ya un tiempo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Scala&lt;/code&gt; siempre estarás en mi ❤️, ¡no te olvido!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  ¿Qué es esto de la computación distribuida? ¿Es muy complicado? 🤔
&lt;/h1&gt;

&lt;p&gt;Internamente la computación distribuida tiene su complejidad, no nos vamos a engañar.&lt;/p&gt;

&lt;p&gt;La buena noticia es que Spark nos abstrae de un montón de problemáticas &lt;em&gt;(computación en paralelo, sincronización de nodos, orquestación de operaciones, tolerancia a fallos y un largo etc)&lt;/em&gt; y nos permite centrarnos en lo importante: &lt;strong&gt;escribir el código con la funcionalidad que queremos desarrollar&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por lo tanto, siempre será interesante conocer los entresijos de la maquinaria que estamos dirigiendo, pero de momento no nos hará falta.&lt;/p&gt;

&lt;h1&gt;
  
  
  Vale, ¿entonces qué necesitamos para empezar?
&lt;/h1&gt;

&lt;p&gt;Lo ideal sería contar un algo de experiencia en programación (si es con &lt;code&gt;Python&lt;/code&gt; sería magnífico) y algo de experiencia utilizando un IDE (&lt;a href="https://www.jetbrains.com/es-es/pycharm/"&gt;PyCharm&lt;/a&gt;, &lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt;) o un editor de textos acompañado de una terminal si es ese tu arsenal habitual ⚔️&lt;/p&gt;

&lt;p&gt;Necesitaremos &lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt;, así como un &lt;a href="https://www.oracle.com/es/java/technologies/javase-jdk11-downloads.html"&gt;JDK&lt;/a&gt;, ya que el código &lt;code&gt;Python&lt;/code&gt; que escribamos se traducirá a &lt;em&gt;bytecode&lt;/em&gt; y se ejecutará en la &lt;code&gt;JVM&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En caso de que estéis desde Windows, existen algunos problemas conocidos, y seguramente sea necesario instalar (WinUtils). Os dejo &lt;a href="https://medium.com/big-data-engineering/how-to-install-apache-spark-2-x-in-your-pc-e2047246ffc3"&gt;un enlace con 5 pasos&lt;/a&gt; para poner a punto la instalación en Windows.&lt;/p&gt;

&lt;p&gt;Con esta breve introducción vamos dando por finalizado el primer artículo de esta serie...&lt;/p&gt;

&lt;h1&gt;
  
  
  ¡Un momento! ¿No nos vas a dar algo para probar? Porfi... 🥺
&lt;/h1&gt;

&lt;p&gt;Bueeeeeeno, vale 😇 Para que podáis comprobar si habéis instalado correctamente todo lo necesario o necesitáis ajustar algo, os pongo un ejemplo para que creéis un nuevo proyecto en vuestro IDE de cabecera.&lt;/p&gt;

&lt;p&gt;Primero habrá que instalar el paquete &lt;code&gt;pyspark&lt;/code&gt; (a día de hoy la última versión es la 3.0.1). Lo podemos instalar a través de &lt;code&gt;pip&lt;/code&gt; y yo siempre recomiendo usar el fichero &lt;code&gt;requirements.txt&lt;/code&gt; para garantizar que no nos olvidamos de ninguna dependencia. Por lo tanto, nuestro fichero &lt;code&gt;requirements.txt&lt;/code&gt; quedaría de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyspark==3.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y lo instalaríamos ejecutando &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Una vez instalado &lt;code&gt;pyspark&lt;/code&gt;, crearemos un fichero &lt;code&gt;hola_mundo.py&lt;/code&gt; en el que pegaremos el siguiente código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pyspark.sql&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SparkSession&lt;/span&gt;

&lt;span class="c1"&gt;# Iniciamos Spark de manera local
&lt;/span&gt;&lt;span class="n"&gt;spark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SparkSession&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"local[*]"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;appName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hola Mundo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getOrCreate&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Paralelizamos una lista del 0 al 9 (incluido)
# Computamos la suma de los números
# Obtenemos el resultado en una variable
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spark&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sparkContext&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parallelize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Imprimimos el resultado
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"La suma es &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmente lo ejecutaremos, ya sea a través del IDE, o mediante una terminal invocando el intérprete de &lt;code&gt;Python&lt;/code&gt; y pasándole nuestro fichero &lt;code&gt;hola_mundo.py&lt;/code&gt; como argumento.&lt;/p&gt;

&lt;p&gt;Aparecerán unos cuantos warnings (ni caso) y finalmente veréis el siguiente output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;La suma es 45

Process finished with exit code 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no habéis tenido tanta suerte, ya tenéis deberes para vuestro tiempo libre 😬&lt;/p&gt;

&lt;p&gt;Espero que os haya gustado esta primera entrega. Se aceptan todo tipo de críticas constructivas 🧐&lt;/p&gt;

&lt;p&gt;¡Nos vemos, equipo! 🙌&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit1&lt;/strong&gt;: Añadida dependencia de PySpark&lt;br&gt;
&lt;strong&gt;Edit2&lt;/strong&gt;: Reformateo de código para cumplir las &lt;a href="https://www.python.org/dev/peps/pep-0008"&gt;reglas de estilo PEP8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>apachespark</category>
      <category>python</category>
      <category>bigdata</category>
    </item>
  </channel>
</rss>
