Entradas

ALGEBRA LINEAR PERA TODOS [Parte 2]

Autor: Paolo Caressa     

Traductor: Paula Vidal

Puntos, vectores y su álgebra Hasta ahora hemos hablado de puntos como la totalidad de los puntos del plano que se identifican de una manera bidireccional con la totalidad de todos los pares posibles de números reales.En lo que respecta al aprendizaje automático, nos interesan los conjuntos de puntos finitos, ya que queremos representar objetos particulares para clasificar o fenómenos para relacionarlos como puntos en un espacio cartesiano. Para encontrar una regularidad o un “patrón” en estos puntos, a menudo nos interesa considerar líneas rectas, planos, así como figuras geométricas más complejas, como cónicas en el plano o cuadrículas en el espacio.Ya hemos visto, con un ejemplo, que algunas figuras geométricas se pueden representar individualmente o con sistemas de ecuaciones. Limitémonos al caso de las líneas rectas y de los planos para comprender en general cómo se representan, dado que a menudo estas representaciones se utilizan en el aprendizaje automático.   Una línea recta es intuitivamente un conjunto de puntos alineados: uno de los axiomas de Euclides establece que en dos puntos solo pasa una línea recta, es decir, que para determinar unívocamente una línea recta es suficiente para indicar dos puntos distintos. Para entender cómo se puede hacer esto en el plano cartesiano, consideremos dos puntos distintos P y Q de coordenadas P=(x1,y1) e Q=(x2,y2). Definimos el vector que va de P a Q como un par de números Cattura 6 Es decir, un vector es, por definición, una diferencia de puntos, donde el término diferencia significa la diferencia entre los componentes que tienen el mismo índice. Desde un punto de vista informático podemos pensar de esta manera: un punto es una matriz (o lista)que son números con dos elementos. Normalmente, una matriz A = [x, y] formadas desde 0, es decir, A [0] = x y A [1] = y. Luego, si A y B son matrices, el vector  \overline{AB}  se puede representar con la matriz [B [0] – A [0], B [1] – A [1]]. Queda por entender por qué llamamos “vector” a una diferencia de puntos: porque es un objeto dotado de dirección, verso e intensidad, como los vectores de la física. La dirección es simplemente la línea que pasa por P y Q; que va de P a Q (el vector opuesto sería \overline{PQ}  que va de Q a P: ¿cuáles son sus componentes?) La intensidad es la distancia entre los puntos P y Q. Por lo tanto, un vector determina una línea y en ella, una dirección: por supuesto, hay vectores infinitos que determinan la misma línea. Por ejemplo la recta que pasa por los puntos   P= (0,1)  y Q= (0,-2) entonces seria la recta \overline{PQ}= (-2,2) , pero también el vector (-1,1)  que tiene la misma dirección, pero tiene diferentes intensidades. En general, por cada numero  (-a,a) un no nulo representa esta línea. Decimos que dos vectores son paralelos si son un múltiplo del otro por un factor de escala distinto de cero. De hecho, otra forma de determinar una recta es identificar un punto P  y un vector \overline{v}  de modo que expresamos todos los puntos paralelos de la recta trasladados a los vectores paralelos de  \overline{v}  X= P+ \overline{av} Esto se denomina ecuación paramétrica de la recta, ya que expresa el punto genérico de la línea por medio de un parámetro que varía en todos los números reales. Tenga en cuenta que utilizamos la operación de suma entre un punto y un vector, definida de manera obvia: si P= (X,Y)  e  v= \overline{RS} entonces   P + \overline{RS} \left ( x+w-a,y+z -b\right ) , suponiendo  que las cordinadas de los puntos  R y  S sean  R=(a,b)  y S=(w,z) .  Osea sumamos las coordinadas  del punto y los componentes  del vector para obtener un nuevo punto. Cuando agregamos un vector a un punto, también decimos que aplicamos el vector en ese punto. Los vectores, además de permitir definir las líneas rectas y en dimensiones superiores, planos e hiperplanos, podemos observar que:

  1. Los vectores se pueden sumar y entre ellos obteniendo otros vectores:

\overline{PQ} + \overline{RS}= Q-P+S-R Entonces notamos que  \overline{PQ} + \overline{QP}=0  (el vector es 0) y  \overline{QP}   es el vector opuesto  \overline{PQ}. Además, esta operación de suma satisface las propiedades conmutativas y asociativas habituales. 2.  Los vectores se pueden multiplicar por un numero obteniendo otros vectores:  Además, esta operación del producto cumple con las propiedades conmutativas, asociativas y distributivas habituales. En particular el vector denominado nulo  \overline{0} se obtiene multiplicando por cero y  con un vector opuesto de un determinado vector  \overline{v}, es  decir aquel vector  \overline{w} tal que  \overline{v} + \overline{w}=0 , lo obtenemos   \overline{v}  multiplicamos  por -1.   El término espacio vectorial significa un conjunto de elementos con dos operaciones, de suma entre los elementos y de multiplicación de un elemento por un número, que satisface las mismas propiedades de las operaciones entre los vectores del plano.

vettore in un piano

Figura 3. El vector obtenido con la suma de dos vectores del plano se construye tomando la diagonal del paralelogramo identificado por los dos vectores si se aplica en el mismo punto.

En realidad, en el aprendizaje automático utilizamos invariablemente espacios vectoriales de dimensiones finitas cuyos vectores se expresan en coordenadas, en este caso los vectores son diferencias de puntos, como en el ejemplo que estamos discutiendo. De hecho, un elemento de confusión para los principiantes es que tanto los puntos como los vectores del espacio cartesiano se representan como pares de números.Queremos recordar que, incluso si están representados de la misma manera, son objetos conceptualmente distintos. Un punto identifica un solo punto en el espacio, un vector identifica un desplazamiento a lo largo de una dirección, hacia y cierta longitud donde es posible hacer que un punto corresponda con un vector y viceversa de la siguiente manera: al punto P podemos hacer que corresponda con el vector    \overline{OP}  este va desde el origen del plano cartesiano hasta el punto. P; si en cambio   \overline{v} ,  es un vector, podemos asociar el punto.  0+\overline{v} .   Esta distinción entre puntos y vectores a menudo se pasa por alto, pero mientras tanto es importante distinguir conceptos aparentemente idénticos, y luego porque ayuda a interpretar las aplicaciones de la teoría: por ejemplo, en la siguiente figura se representan, según un cierto algoritmo de aprendizaje automático, algunas palabras de un Cuerpo de documentos en inglés con los puntos del plano cartesiano:   italy   Como puedes ver los puntos representan palabras. ¿Qué representan los vectores en este caso? Tomemos el vector que va de “pizza” a “italia” y apliquemos a “sushi”: obtenemos indicativamente “japón”. Deducimos que ese vector representa la respuesta a una pregunta, que es “dado un plato típico, ¿cuál es su nación?”. En este caso, está claro que los puntos y vectores representan conceptos distintos. Longitud y ángulo entre vectores, similitud del coseno Para definir la longitud de un vector introducimos una notación ampliamente utilizada: el producto escalar (o dot-product). Sea  \overline{v} =(v_1,v_2) e  \overline{v} = (v_1,w_2) decimos que el productor escalar de   \overline{v}  y  \overline{w}   es el numero: ecuacion 1   Obtenemos la suma de los productos de los componentes del mismo índice de los dos vectores. En particular, el producto escalar de un vector por sí mismo es, por definición, el cuadrado de su longitud: ecuacion 2 La longitud de un vector también se llama norma: tenga en cuenta que la fórmula muestra claramente que la regla que hemos considerado es “euclidiana”, y la razón se debe al hecho de que si escribimos como diferencia de puntos, encontramos que nueva ecuacion 3 La longitud de un vector que hemos definido aquí es la que en física se llama su intensidad: además de la longitud, también podemos definir el ángulo entre dos vectores, implícitamente por medio de la fórmula: ecuacion 4 Usando la función coseno del arco es posible calcular este ángulo a partir del producto escalar de los dos vectores y sus longitudes: la razón por la cual esta fórmula define efectivamente el ángulo entre los vectores está relacionada con la trigonometría. Nostamos que   \theta  es un numero entre -1 y  1  tal que: imagen 3 Entonces, mientras la distancia compara la similitud entre dos puntos, que son tanto más similares cuanto más cerca está de cero, el coseno mide la similitud entre dos vectores, en el sentido de que cuanto más cerca está de 1 en valor absoluto y más los vectores determinan la misma recta. Esta medida se usa a menudo en el aprendizaje automático para clasificar objetos mapeados en espacios vectoriales. El espacio cartesiano en N dimensiones. En el tour del tal vez de la geometría cartesiana y vectorial que hemos seguido hasta ahora, nos hemos limitado al caso de la dimensión N = 2 para ayudarnos con los dibujos y desarrollar los conceptos en un entorno familiar: pero en las aplicaciones estamos tratando con espacios de dimensión. También muy alto. En este caso, debemos renunciar a la intuición, pero en realidad todas las fórmulas que hemos dado y todos los conceptos que hemos definido se transportan “en pie de igualdad” al caso de cualquier tamaño.De hecho, todas las fórmulas dependen de sumas y restas de las coordenadas de los puntos y los componentes de los vectores: si estos componentes son 2 o 20,000, no hay una diferencia real. Aún mejor, todo esto se implementa de manera muy eficiente en una computadora, donde podemos digerir puntos y vectores en espacios muy grandes sin problemas. Sin embargo, debemos explicar un concepto de hiperplano: en el caso del plan coincide con el concepto de línea y en el caso del espacio ordinario con el concepto de plano. Dada una dimensión N consideramos el espacio cartesiano R^n.   Una línea recta de este espacio está, como en el caso de la dimensión 2, determinada por un par de puntos o por un punto y por un vector: la ecuación paramétrica es la misma que en el caso bidimensional. Si N > 2 También podemos considerar ecuaciones paramétricas del tipo: ecuacion 5 En este caso tenemos dos parámetros que varían independientemente, por lo tanto, por intuición, el conjunto de puntos X que satisfacen esta ecuación en la variación de a y b en los números reales corresponde a los pares (a, b), es decir, al plano. En otras palabras, es un objeto bidimensional. En realidad pueden haber excepciones : por ejemplo    \overline{v}= \overline{w} la ecuación paramétrica anterior se reduce a ecuacion 6 Así que en realidad representa una recta. Entonces, si escribimos una ecuación paramétrica con múltiples parámetros, el tamaño del conjunto de puntos descrito por esta ecuación depende de las relaciones entre los vectores utilizados para escribirla: en el caso anterior, si los vectores son paralelos, la ecuación representa una línea recta y no un plano. Si en general, en un espacio de tamaño N, escribimos una ecuación paramétrica en los parámetros N – 1, tenemos: ecuacion 7 Si todos los vectores que aparecen en él son paralelos, ¡todavía tenemos una línea recta! Para asegurarnos de que tenemos un objeto de tamaño N-1, debemos encontrar un análogo de la condición de paralelismo entre dos vectores que se pueda expresar con más de dos. Digamos que n vectores: Cattura 1 son linealmente independientes si la única forma de satisfacer la ecuación ecuacion 8 Es que todos los coeficientes  a_1, a_2,a_n   son nulos! Es decir, la única solución a esta ecuación vectorial debe ser Cattura2 Ahora podemos definir un hiperplano de tamaño N – 1 en un espacio cartesiano de tamaño N como el conjunto de puntos definidos por la ecuación paramétrica ecuacion 9 Para variar en todas las formas posibles de los números: Cattura 3

y suponiendo que los portadores representados a continuación son linealmente independientes.

Cattura4 Un hiperplano también se puede describir mediante una ecuación cartesiana, es decir, mediante una relación lineal entre las coordenadas del punto genérico que le pertenece: ecuacion 10 donde b_i no todos son equivalentes a 0. Una forma de determinar esta ecuación es observar que la suma de los productos de los coeficientes y las coordenadas es el producto escalar entre el vector  \overline{b} = (b_1, b_2,..,b_n) y el vector \overline{x} = (x_1, x_2,..,x_n) de las coordenadas, para que podamos escribirlo. Cattura 5 Esto significa que el hiperplano está formado por vectores que son perpendiculares al vector que representa la dirección perpendicular al hiperplano, el que falta para llenar todo el espacio. Un hiperplano de tamaño N – 1 en un espacio de tamaño N separa el espacio en dos partes, exactamente como una línea recta separa el plano en dos y un plano separa el espacio tridimensional en dos: los puntos que pertenecen a una de las dos partes en las que el espacio está separado del hiperplano que tiene las coordenadas que satisfacen la desigualdad. ecuacion 13 Mientras que los puntos cuyas coordenadas satisfacen la desigualdad. ecuacion 14 Constituyen la otra parte del espacio delimitado por el hiperplano. Esta idea de usar un hiperplano para separar el espacio en dos partes es separable linealmente y se usa en algoritmos clásicos de aprendizaje automático, como árboles de decisión o máquinas de vectores de soporte. Las matrices y su álgebra. Una de las características del álgebra lineal es la facilidad y universalidad de sus métodos numéricos: en esencia, es suficiente haber implementado un algoritmo (o una variante de él), a saber, la eliminación de Gauss, para poder hacer básicamente cualquier cosa [una introducción a este algoritmo. Se encuentra por ejemplo en estas notas]. Estos algoritmos normalmente ya están implementados en todas las bibliotecas de cálculo numérico estándar, por ejemplo, numpy.linalg de Python. Para cerrar este tutorial (ahora demasiado largo) es apropiado introducir la noción clave que involucra a todos estos algoritmos, y que también es útil en todos los desarrollos conceptuales del álgebra lineal: el concepto de matriz. Una matriz es simplemente una tabla de números: o incluso definible como una matriz bidimensional. Por lo tanto, decimos que una matriz n × m es una tabla de números que denotamos mediante dos índices, iej, donde el primer índice identifica la fila y el segundo la columna: en la intersección de la fila i y la columna j encontramos el número identificado por estos índices (en matemáticas los índices comienzan en 1 y no en 0 como en informática) Cuando lo escribimos en su totalidad, una matriz se representa de la siguiente forma tabular: ecuacion15   Una matriz en la que n = m se llama matriz cuadrada. Desde un punto de vista práctico, una matriz parece simplemente un vector de longitud nm cuyos elementos están dispuestos en forma tabular en lugar de estar escritos en secuencia. Sin embargo, este cambio de notación es esencial para usar estos objetos. En particular, las matrices enriquecen el álgebra de los vectores con una operación de multiplicación propia: primero notamos que podemos sumarlos y multiplicarlos por un número, aún obteniendo matrices del mismo tipo Catturab6 Una matriz en la que n = m se llama matriz cuadrada. Desde un punto de vista práctico, una matriz parece simplemente un vector de longitud nm cuyos elementos están dispuestos en forma tabular en lugar de estar escritos en secuencia. Sin embargo, este cambio de notación es esencial para usar estos objetos. En particular, las matrices enriquecen el álgebra de los vectores con una operación de multiplicación propia: primero notamos que podemos sumarlos y multiplicarlos por un número, aún obteniendo matrices del mismo tipo Cattura66 Aparentemente no hay una diferencia sustancial, pero en realidad si interpretamos un vector como un tipo particular de matriz, el vector de fila es una matriz de 1 × 3 mientras que el vector de columna es una matriz de 3 × 1. Lo que se puede hacer es, de hecho, dada una matriz A del tipo n × my una matriz B del tipo n × r multiplicar A por B obteniendo una matriz n × r. El coeficiente de los índices i y j de la matriz AB se calcula como la siguiente suma: Cattura 12 Tenga en cuenta que este es el producto escalar del vector de fila dado por la i-ésima fila de A para el vector de columna dado por la j-ésima columna de B: esta es la razón por la cual el producto de las matrices de las llamadas filas de productos por columnas. Ejemplo: multiplicamos una matriz de 2 × 3 para una matriz de 2 × 3: image1 Ahora volvamos a nuestros vectores: podemos multiplicar el vector de fila por el vector de columna, y una matriz de 1 × 1 produce un número (el producto escalar). Pero también podemos multiplicar el vector de columna 3 × 1 por el vector de fila 1 × 3 obteniendo una matriz de 3 × 3: catura 12 Por lo tanto, observamos que al multiplicar dos vectores de un espacio de dimensión N obtenemos un vector de un espacio de otra dimensión: 1 o N × N. La matriz de identidad es la matriz cuadrada que contiene cero en todas partes excepto en la diagonal donde contiene 1 (los elementos diagonales de una matriz son aquellos cuyo índice de fila es igual al índice de columna :). Por ejemplo, en la dimensión 3 la matriz de identidad es   ecuacion 16   Como sugiere su nombre, multiplicar una matriz A por la matriz de identidad aún produce A. Además, el producto de la matriz es distributivo con respecto a la suma. Sin embargo, el álgebra matricial tiene una particularidad: el producto no es conmutativo, lo que significa que AB es diferente de BA (de hecho, BA podría no tener significado, por ejemplo, n ≠ m). Por ejemplo ultima ecuacion   Otra operación típica que se lleva a cabo es la multiplicación de una matriz n × m para un vector de columna de m componentes: resulta un vector de columna de n componentes.

Aprendizaje profundo con Apache Spark — Parte 1

Autor: Favio Vázquez

Este artículo representa la primera parte de una discusión sobre Distributed Deep Learning con Apache Spark. Analizaremos principalmente qué es Spark y los conceptos básicos de Spark + DL. Puedes encontrar la segunda parte aquí: Deep Learning With Apache Spark — Part 2.

  Introducción de  Apache Spark

 

apache spark

 

Apache Spark TM

Spark sus creadores lo definen como una tecnología rápida y genérica para el procesamiento de datos a gran escala.

Rápido en comparación con los enfoques anteriores en la gestión de grandes volúmenes de datos, como el clásico MapReduce. El secreto de Spark radica en la memoria (RAM) que hace que el procesamiento sea más rápido que el realizado en el disco

Generica significa, que se puede usar para múltiples funciones tales como: ejecución de SQL distribuido, creación de canalizaciones de datos, asimilación de datos en bases de datos, ejecución de algoritmos de aprendizaje automático, trabajo con estructuras gráficas, etc.

 

 

RDD

 

 

 

image 1

Imagen sacada de PySpark-Pictures de Jeffey Thompson

El punto de partida de Apache Spark es el Resilient Distributed Dataset (RDD), un set de datos dividido en particiones.

Un RDD es un conjunto de elementos, con tolerancia a fallas (fault-tolerant) , que se pueden ejecutar en paralelo. Puede crearlos paralelizando una colección que ya tienen en su programa driver o haciendo referencia a un dataset en un sistema de memoria externo como HDFS, HBase o cualquier fuente de datos que ofrezca un formato de entrada Hadoop.

 

rdd

 

Una cosa para recordar acerca de Spark es que en todas las transformaciones los resultados no se contaran de inmediato, sino que se aplica una estructura de gráfico. Las transformaciones se calculan solo cuando se define el gráfico.

 

Por defecto, cada RDD se puede recalcular cada vez que se realiza una acción en él. Sin embargo, también puede mantener un RDD en la memoria utilizando el método de caché, y en este caso Spark mantendrá los elementos alrededor del clúster en la memoria para un acceso futuro más rápido. También ofrece soporte para almacenar RDD en un disco o replicarlos en múltiples nodos

 

Si desea obtener más información sobre las transformaciones y acciones de RDD en Spark, consulte en la documentación oficial:

RDD Programming Guide – Spark 2.3.0 Documentation
Spark 2.3.0 programming guide in Java, Scala and Pythonspark.apache.org

Dataframe

image 2

 

Imagen sacada de PySpark-Pictures de Jeffey Thompson

Comenzando con la versión Spark 2.0.0 DataFrame, el dataset está organizado en columnas con nombre. Conceptualmente es equivalente a una base de datos relacional o un data frame en R / Phyton, pero con sistemas de optimización más sofisticados.

En este artículo no profundizaremos sobre el dataset, pero digamos que lo podemos definir como una colección distribuida de datos que pueden derivarse del  JVM object y luego manipularse mediante transformaciones funcionales. También están disponibles en Scala y Java.

Los dataframe se pueden se puede obterner de una variedad de fuentes tales como: datos estructurados, tabla en Hive, bases de datos externas o RDD existentes.

image 3

 

https://aspgems.com/blog/big-data/migrando-de-pandas-spark-dataframes

En resumen, el dataframe API es el medio utilizado por los desarrolladores de Spark para facilitar el trabajo con datos en el framwork. Es muy similar a los de Pandas y R pero con muchas ventajas. En primer lugar es que pueden distribuirse alrededor de los clusters, para que puedan trabajar con muchos datos; en segundo lugar  es que están optimizados.

Este fue definitivamente el paso más importante, que hizo que el uso de Spark fuera mucho más rápido con Java o Scala.

 

 

image 4

 

 

La persona responsable de esta optimización es Catalyst. Este último toma set de queries y crea un plan optimizado y distribuido para el cálculo.

 

 

 

 

 

 

image 5

Deep Learning y Apache Spark

 

image 6

https://becominghuman.ai/building-an-image-classifier-using-deep-learning-in-python-totally-from-a-beginners-perspective-be8dbaf22dd8

Si quiere saber más sobre el aprendizaje profundo, lea primero los siguientes artículos:

 

A “weird” introduction to Deep Learning

My journey into Deep Learning

¿Por qué utilizar Deep Learning en Apache Spark?

  1. Apache Spark es un framework  para el cálculos distribuido en un clúster.
  2. Hay partes del aprendizaje profundo que son computacionalmente pesadas y la distribución de estos procesos es problemática; Apache Spark es una gran solución.

Hay varias maneras de utilizar el aprendizaje profundo con Apache Spark, los enumeramos a continuación:

  1. Elephas: Distributed DL con Keras e PySpark:

maxpumperla/elephas

  1. Yahoo! Inc.: TensorFlowOnSpark lleva los programas de Tensorflow a los clusters de Apache Spark:

yahoo/TensorFlowOnSpark

 

  1. CERNDistributed DL con un enfoque en distributed training usando Keras y Apache Spark:

cerndb/dist-keras

  1. Qubole el aprendizaje profundo ha demostrado producir modelos altamente efectivos de aprendizaje automático en diferentes áreas (tutoriales Keras + Spark):

Distributed Deep Learning with Keras on Apache Spark | Qubole

  1. Intel Corporation: BigDL (Distributed Deep Learning Library for Apache Spark)

intel-analytics/BigDL

Deep Learning Pipelines

 

 

 

 

image 7

 

 

Databricks

En lo que nos enfocaremos en estos dos artículos  Deep Learning Pipelines.

databricks/spark-deep-learning
spark-deep-learning – Deep Learning Pipelines for Apache Sparkgithub.com

Deep Learning Pipelines es una biblioteca de código abierto creada por Databricks que proporciona API de alto nivel para el aprendizaje profundo escalable en Phyton con Apache Spark.

No pasará mucho tiempo antes de que se convierta en una API oficial, así que vale la pena echarle un vistazo.

Algunas de las ventajas de esta biblioteca, en comparación con las enumeradas anteriormente, son:

  • Proporciona API listas para usar que permiten el uso de aprendizaje profundo con unas pocas líneas de código.
  • Se centra en la integración de fácil uso sin sacrificar el rendimiento.
  • Esta creado por los desarrolladores de Apache Spark, por lo que es más probable que surja como una API oficial.
  • Está escrita en Python, por lo que se integra con las librerias más importantes y utiliza la potencia del Tensorflow y Keras, son dos de los más utilizados en el el aprendizaje profundo.

En la siguiente parte nos enfocaremos completamente en la DL pipelines library  y cómo usarlas. Veremos en particular algunos temas tales como: transfer learning en una simple pipelibe, cómo usar modelos pre entrenados para trabajar con una cantidad “pequeña” de datos y hacer predicciones, etc.

 

Si desea obtener más información sobre Pipeline en Data Science con Python, eche un vistazo a estos artículos de Matthew Mayo:

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 1: A Gentle Introduction

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 2: Integrating Grid Search

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 3: Multiple Models, Pipelines…

 

Para Pipeline en Spark, mire aquí:

 

ML Pipelines – Spark 2.3.0 Documentation

 

Como usar PySpark en el computador

Autor Favio Vázquez

 

spark 2

 

 

https://www.mytectra.com/apache-spark-and-scala-training.html

Supongamos que ya sabe de Apache Spark y PySpark, pero si desea ver una breve introducción la puede encontrar aquí.

El simbolo $ esta ejecutando el comando en el shell, por lo que no tienen que copiarlo.

 

Ejecutar PySpark in Jupyter

 

jupiter

 

  1. Instalar Jupyter Notebook

$ pip install jupyter

  1. Instalar PySpark

 

Comprueben si tienen Java 8 o versiones posteriores en su computadora. También necesitarás Python. (aconsejamos Python 3.5 de Anaconda).

Ahora vayan a la  pagina download di Spark. Seleccione la última versión, un paquete predeterminado para Hadoop, descárguelo.

Si quieren un apoyo Hive o si lo desea, tendrá que crear la distribución de spark usted mismo. Para hacerlo, vaya aquí.

Abra el archivo zip y muévalo a la carpeta directory / opt:

$ tar -xzf spark-2.3.0-bin-hadoop2.7.tgz
$ mv spark-2.3.0-bin-hadoop2.7 /opt/spark-2.3.0

Crea un enlace simbólico que te permita tener múltiples versiones de Spark:

$ ln -s /opt/spark-2.3.0 /opt/spark̀

Finalmente, insértalo en su  shell bash (o zsh ecc.) donde encuentre Spark de esta manera: configuren sus variables $PATH agregando las siguientes líneas en su archivo ~/.bashrc (o ~/.zshrc):

export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH

Ahora, para realizar  PySpark in Jupyter, necesitan actualizar las variables de entorno a PySpark. agregando las siguientes líneas en su archivo ~/.bashrc (or ~/.zshrc):

export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=’notebook’

Reiniciar la terminal y lanzar PySpark:

$ pyspark

Este comando debería reiniciar Jupiter Notebook en su browser. Luego crea un nuevo notebook haciendo click ‘New’ > ‘Notebooks Python [default]’. Entonces les aparecera SparkContext y SqlContext (o solo SparkSession per Spark > 2.x)  en su computadora y ahora puede comenzar  a usar PySpark del pc. aqui algunos ejemplos para probar el ambiente.

Ejecutar PySpark nell’IDE  elejido (Integrated Devolopment Environment)

A veces necesitarás un entero IDE para crear códigos más complejos y PySpark no es de dafult en sys.path. pero esto no significa que no puedas usarlo como una biblioteca normal: simplemente agrégalo a la sys.path en la fase de ejecución.  El paquete findspark posee esta función.

$ pip install findspark

Después, para reiniciar PySpark en su IDE, escriban:

import findspark
findspark.init()

 

 

import pyspark
sc = pyspark.SparkContext(appName=”myAppName”)

Esto es todo. A continuación se muestra un ejemplo para probar PySpark localmente:

import findspark
findspark.init(“/opt/spark”)
import random
from pyspark import SparkContext
sc = SparkContext(appName=”EstimatePi”)
def inside(p):
    x, y = random.random(), random.random()
    return x*x + y*y < 1
NUM_SAMPLES = 1000000
count = sc.parallelize(range(0, NUM_SAMPLES)) \
             .filter(inside).count()
print(“Pi is roughly %f” % (4.0 * count / NUM_SAMPLES))
sc.stop()

view rawsimple_spark.py hosted with ❤ by GitHub

Si tiene alguna duda o pregunta, ¡no dude en hacer comentarios y solicitar aclaraciones!

 

Jupyter Notebook Python, Scala, R, Spark, Mesos Stack

docker

 

 

Docker es similar a una “máquina virtual” liviana (Dockers proporciona “imágenes” y “cointainer” y no máquinas virtuales),  como si tuviéramos una segunda computadora con su propio sistema operativo dentro de nuestra máquina. Podemos acceder a esta máquina virtual desde nuestra computadora y usarla como si estuviéramos accediendo a una computadora remota a través de ssh.

jupyter/docker-stacks
docker-stacks – Opinionated stacks of ready-to-run Jupyter applications in Docker.github.com

hagan click en el link  y siga los pasos indicados para tener una versión “contenerizada”  de Spark (2.3 con Hadoop 2.7)

Uso básico

El comando que sigue starts a container with the Notebook server listening for HTTP connections on port 8888 con un token de autenticación generada aleatoriamente

$ docker run -it –rm -p 8888:8888 jupyter/pyspark-notebook

 

Instalación de Pip

pip

 

Este paquete aún es experimental y puede cambiar en versiones futuras.

El paquete Python para Spark no pretende reemplazar todos los demás casos de uso. Esta versión     Python packaged de Spark es adecuado para interactuar con un clúster existente, que puede ser Spark, YARN o Mesos, pero no contiene las herramientas necesarias para configurar nuovos cluster.

Para instalarlo, ejecuta:$ pip install pyspark

Blockchain will make AI smarter by feeding it better data

AI in the UK:ready, willing and able?

Google TPU

Andrew Ng 175M