Encontré una pagina genial, lo que hace esta pagina es plantear que es lo mejor para un area determinada y los usuarios votan.
Por ejemplo:
Cual es el mejor lenguaje que compila a javascript?
Cual es la mejor distribución de Linux del 2018?
Cual es el mejor lenguaje de tipado dinámico?
etc...
Dejo link: https://www.slant.co
Translate
sábado, 22 de septiembre de 2018
martes, 18 de septiembre de 2018
Libros Gratuitos sobre Python
Quiero compartir este post sobre libros de Python. Son 6 libros de temas variados pero todos sobre el lenguaje python. Además se pueden descargar en diferentes formatos.
Dejo link: http://unowp.com/free-python-programming-books-everyone/
domingo, 16 de septiembre de 2018
Concepto de ventana en Apache Spark Streaming
Hemos hecho un ejemplo con Apache Spark Streaming. Pero ahora, consideremos la idea de Windows. En Spark Streaming, tenemos pequeños lotes de datos que ingresan en un rango de tiempo o ventana de tiempo.
Spark hace un lote de los datos entrantes de acuerdo con el intervalo de tiempo, pero a veces debemos recordar cosas del pasado. Por ejemplo podemos querer mantener un promedio de treinta segundos para datos de entrada, pero queremos resultados cada cinco segundos. En este caso, desearía un intervalo de lote de cinco segundos, pero una longitud de ventana de treinta segundos. Spark proporciona varios métodos para realizar este tipo de cálculos.
La solución que tenemos tenemos que usar son funciones de ventana.
Windows nos permite tomar un primer lote y luego un segundo lote y luego un tercer lote y luego crear una ventana de todos los lotes en función del intervalo de tiempo especificado. De esta forma, siempre podemos tener el nuevo RDD y también el historial de los RDD que existieron en la ventana.
La función de ventana más simple es una ventana, que le permite crear una nueva DStream, calculada aplicando los parámetros de ventana al viejo DStream. Puede usar cualquiera de las operaciones de DStream en la nueva transmisión, para que tenga toda la flexibilidad que pueda desear.
Por ejemplo, desea PUBLICAR a todos los usuarios activos de los últimos cinco segundos, pero desea actualizar los resultados cada segundo.
sc = SparkContext(appName="ActiveUsers")
ssc = StreamingContext(sc, 1)
activeUsers = [
["Alice", "Bob"],
["Bob"],
["Carlos", "Dan"],
["Carlos", "Dan", "Erin"],
["Carlos", "Frank"],
]
rddQueue = []
for datum in activeUsers:
rddQueue += [ssc.sparkContext.parallelize(datum)]
inputStream = ssc.queueStream(rddQueue)
inputStream.window(5, 1)\
.map(lambda x: set([x]))\
.reduce(lambda x, y: x.union(y))\
.pprint()
ssc.start()
sleep(5)
ssc.stop(stopSparkContext=True, stopGraceFully=True)
Este ejemplo imprime todos los usuarios activos de los últimos cinco segundos, pero lo imprime cada segundo. No es necesario realizar un seguimiento manual del estado, ya que la función de ventana conserva los datos antiguos durante otros cuatro intervalos. La función de ventana le permite especificar la duración de la ventana y la duración de la diapositiva, o la frecuencia con la que desea que se calcule una nueva ventana.
Spark hace un lote de los datos entrantes de acuerdo con el intervalo de tiempo, pero a veces debemos recordar cosas del pasado. Por ejemplo podemos querer mantener un promedio de treinta segundos para datos de entrada, pero queremos resultados cada cinco segundos. En este caso, desearía un intervalo de lote de cinco segundos, pero una longitud de ventana de treinta segundos. Spark proporciona varios métodos para realizar este tipo de cálculos.
La solución que tenemos tenemos que usar son funciones de ventana.
Windows nos permite tomar un primer lote y luego un segundo lote y luego un tercer lote y luego crear una ventana de todos los lotes en función del intervalo de tiempo especificado. De esta forma, siempre podemos tener el nuevo RDD y también el historial de los RDD que existieron en la ventana.
La función de ventana más simple es una ventana, que le permite crear una nueva DStream, calculada aplicando los parámetros de ventana al viejo DStream. Puede usar cualquiera de las operaciones de DStream en la nueva transmisión, para que tenga toda la flexibilidad que pueda desear.
Por ejemplo, desea PUBLICAR a todos los usuarios activos de los últimos cinco segundos, pero desea actualizar los resultados cada segundo.
sc = SparkContext(appName="ActiveUsers")
ssc = StreamingContext(sc, 1)
activeUsers = [
["Alice", "Bob"],
["Bob"],
["Carlos", "Dan"],
["Carlos", "Dan", "Erin"],
["Carlos", "Frank"],
]
rddQueue = []
for datum in activeUsers:
rddQueue += [ssc.sparkContext.parallelize(datum)]
inputStream = ssc.queueStream(rddQueue)
inputStream.window(5, 1)\
.map(lambda x: set([x]))\
.reduce(lambda x, y: x.union(y))\
.pprint()
ssc.start()
sleep(5)
ssc.stop(stopSparkContext=True, stopGraceFully=True)
Este ejemplo imprime todos los usuarios activos de los últimos cinco segundos, pero lo imprime cada segundo. No es necesario realizar un seguimiento manual del estado, ya que la función de ventana conserva los datos antiguos durante otros cuatro intervalos. La función de ventana le permite especificar la duración de la ventana y la duración de la diapositiva, o la frecuencia con la que desea que se calcule una nueva ventana.
Libros gratuitos de Java code Geeks
|
| ||||||
|
|
jueves, 13 de septiembre de 2018
martes, 11 de septiembre de 2018
Presto
Presto es una herramiento diseñada para correr consultas sobre grandes cantidades de datos usando consultas distribuidas, trabajando en el orden de los petabytes de datos.
Permite interactuar con Hadoop y su HDFS. Fue diseñado como una alternativa a otras herramientas que consultaba el HDFS usando conexiones a los jobs de MapReduce, como lo hace Hive.
Pero Presto no solo se limita a trabajar sobre el HDFS, también tiene un API que permite definir diferentes tipos de fuentes de datos, incluidos base de datos relacionales, base de datos no relacionales, archivos locales, entre otras fuentes.
Fue pensado para manejar datawarehouses, analytics, análisis de datos, agregación de grandes cantidades de datos o generar reportes. Esas características, permite definir a Presco como un OLAP (Online analytical Processing).
Presto es una herramienta distribuida basada en un motor SQL para realizar análisis interactivos contra bases de datos de todos los tamaños posibles.
Entre las características podemos nombrar:
- Presto permite consultar datos desde varias fuentes, incluido Hive, Cassandra, bases de datos relacionales, archivos planos o incluso datastores privados, lo que permite cruzar datos desde muchas fuentes al mismo tiempo sin mucho esfuerzo.
- Esta herramienta está apuntada para análisis donde los tiempos de respuestas son críticos para las tomas de decisiones.
Existen 2 tipos de servidores, los coordinadores (coordinators) y los trabajadores (workers) y la comunicación entre ambos tipos de servidores es por REST API. Con fines de desarrollo y testeo, se puede configurar un nodo como coordinador y trabajador al mismo tiempo.
Los coordinadores son los nodos donde el “cliente” se conecta para enviarles las consultas que requiere. Son los responsables de parsear las sentencias, generar los planes de ejecución de las consultas, coordinar los trabajadores (mantiene un tracking de que está haciendo cada trabajador para coordinación).
Los trabajadores son responsables de ejecutar las tareas que el coordinador requiere y de procesar los datos para cumplirla. Se los configura que para que al momento de iniciar, se reporten al coordinador correspondiente para que éste los tenga en cuenta para las tareas futuras.
Un conector permite a los trabajadores conectarse a fuentes de datos, como Hive o una base de datos relacional. Se pueden pensar los mismos como un “driver” para cada base de datos en particular.
A la vez existe el concepto de catálogo este contiene esquemas que referencian a los datos a través del conector. Se configuran en archivos “properties” dentro de la carpeta de configuración de Presto.
Y un esquema es una manera de agrupación de tablas que pueden ser consultadas por los trabajadores. El mapeo de schemas queda delegado a cada tipo de conector en particular.
Y las tablas es un conjunto de filas desordenadas que se organizan en columnas con tipos definidos (parecido a una base de datos relacional). Este mapeo de datos a columnas y tipos lo define cada conector en particular.
Presto ejecuta consultas SQL basadas en el ANSI-SQL. Cuando Presto parsea una sentencia, convierte a esta en una consulta SQL y crea un plan de ejecución que va a distribuir entre sus trabajadores asociados.
La diferencia entre una sentencia y una consulta es que la sentencia es “texto plano” mientras que la consulta en si, es el plan asociado a esa sentencia. La consulta encapsula lo que son las etapas, tareas, splits, conectores y demás recursos necesarios para cumplir con esas sentencia.
Cuando Presto ejecuta una consulta, divide a ésta en etapas dentro del plan. Estas etapas quedan definidas como un árbol de ejecución, donde cada etapa tiene una etapa superior que se encarga de juntar los resultados de las etapas inferiores.
Y como si fuera poco Presto es open source.
Dejo link: https://prestodb.io/
lunes, 10 de septiembre de 2018
Dart 2 fue lanzado
Lo que más destaca de Dart 2 a nivel del propio lenguaje y las bibliotecas es que ahora está fuertemente tipado, las palabras clave de creación de instancias son ahora por lo general opcionales, el modo verificado ha sido eliminado y tanto el lenguaje como las bibliotecas principales han sido modificadas en parte como resultado de los cambios en los sistemas de tipos.
A nivel de herramientas, Pub ya no soporta transformadores, por lo que se recomienda utilizar el nuevo sistema de compilación en su lugar, además de haberse cambiado las herramientas relacionadas con el desarrollo web. Junto a todo lo introducido en Dart 2, también se ha publicado en el anuncio oficial el proceso general sobre cómo migrar proyectos de la primera a la segunda versión.
Si el relanzamiento funciona, seguiremos hablando de este lenguaje.
Por ahora dejo link: https://www.dartlang.org/dart-2
viernes, 7 de septiembre de 2018
Los mejores lenguajes de programación para Blockchain
Quiero compartir un post sobre lenguajes para programar en Blockchain, por que lo comparto? Porque es uno de los poco top que trae con sigo lenguajes originales hasta hay algunos que no conozco y ya voy a estudiar!
Claramente tienen que aparecer los lenguajes de moda y como están de moda existe una librería para casi todo: Java, C++, Python, javascript, Ruby.
Pero entre las novedades tenemos a : Solidity, Simplicity, Rholang.
Solidity es un lenguaje de alto nivel orientado a contratos. Fue influenciado por C ++, Python y JavaScript y está diseñado para la Máquina Virtual Ethereum (EVM).
Simplicity : un nuevo lenguaje para Blockchains. Y ya lo voy a estudiar.
Rholang es un lenguaje de programación concurrente, con un enfoque en el envío de mensajes y formalmente modelado por el cálculo ρ, una extensión reflexiva de orden superior del cálculo π. Está diseñado para ser utilizado para implementar protocolos y "contratos inteligentes" en una cadena de bloques de propósito general, pero también podría usarse en otros entornos.
Sin más dejo el post: https://www.geekboots.com/story/top-languages-that-are-best-for-blockchain-programming
miércoles, 5 de septiembre de 2018
HBase, la base de datos distribuida de Hadoop
Apache HBase es una base de datos noSQL distribuida y escalable para almacenar grandes volúmenes de datos.
Algunas características:
- Random Access.
- Acceso en tiempo real
- Datos distribuidos
- Versionado de datos
- No relacional
- Basada en Bigtable de Google
No se debe confundir con el modelo de tablas de una BD relacional, en cambio, se lo debe pensar como un mapa multidimensional.
- Tabla: Consiste de múltiples filas.
- Fila: Consiste de una clave y una o más columnas asociadas a la clave. Las filas se ordenan alfabéticamente por clave, por eso es importante un buen diseño de la clave.
- Columna: Consiste de una familia y un índice (qualifier), delimitado por ‘:’
- Familia: Agrupa datos que son físicamente almacenados juntos por razones de performance.
- Identificador de columna: Se agrega a la familia de la columna para identificar un conjunto de datos.
- Celda: Combinación de fila, familia de columna, índice. Contiene un valor y un timestamp.
- Timestamp: Identifica la versión de un valor.
En el teorema CAP, Hbase esta ubicado en CP es decir que se preocupa por la consistencia.
Es de la organización Apache por lo que tiene licenca Apache 2 y se distribuye de forma gratuita.
Dejo link: https://hbase.apache.org/
domingo, 2 de septiembre de 2018
5 librerías de machine learning para Java
El aprendizaje automático o machine learning esta en la cresta de la ola, por lo tanto vamos a nombrar 5 librerías o frameworks para machine learning en Java.
Weka : Weka 3 es un framework de trabajo totalmente basado en Java que se utiliza para aprendizaje automático. Weka se utiliza principalmente para la extracción de datos, el análisis de datos y el modelado predictivo. Es completamente gratuito, portátil y fácil de usar con su interfaz gráfica.
La fuerza de Weka radica en la clasificación, por lo que las aplicaciones que requieren clasificación automática de datos pueden beneficiarse de ella, pero también admite clustering, minería de reglas de asociación, predicción de series de tiempo, selección de características y detección de anomalías.
Massive Online Analysis (MOA) : MOA es un software de código abierto utilizado específicamente para el aprendizaje automático y la minería de datos en flujos de datos en tiempo real. Desarrollado en Java, también se puede usar fácilmente con Weka mientras escala a problemas más exigentes. La colección de MOA de algoritmos de aprendizaje automático y herramientas para la evaluación son útiles para la regresión, clasificación, detección de valores atípicos, clustering, sistemas de recomendación y detección de deriva de conceptos. MOA puede ser útil para grandes conjuntos de datos en evolución y flujos de datos, así como también para los datos producidos por los dispositivos del Internet of Things (IoT). MOA está específicamente diseñado para el aprendizaje automático en flujos de datos en tiempo real. Su objetivo es el procesamiento eficiente en tiempo y memoria. MOA proporciona un marco de referencia para ejecutar experimentos en el campo de minería de datos al proporcionar varias funciones útiles, que incluyen un marco fácilmente extensible para nuevos algoritmos, flujos y métodos de evaluación; configuraciones almacenables para flujos de datos (reales y sintéticos) para experimentos repetibles; y un conjunto de algoritmos y medidas existentes de la literatura para comparación.
Deeplearning4j : Deeplearning4j es una librería de deep-learning distribuida, de código abierto y esta programado en Java y Scala. Su misión es reunir redes neuronales profundas y aprendizaje de refuerzo profundo para entornos empresariales. Deeplearning4j está destinado a servir como herramienta de bricolaje para los programadores Java, Scala y Clojure que trabajan en Hadoop. Las redes neuronales profundas y el aprendizaje de refuerzo profundo son capaces de reconocimiento de patrones y aprendizaje automático orientado a objetivos. Todo esto significa que Deeplearning4j es muy útil para identificar patrones. Además, puede usarse para detectar anomalías en datos de series de tiempo como transacciones financieras.
MALLET : MALLET es un conjunto de herramientas de código abierto Java para aprendizaje automático de lenguaje a texto. Este paquete basado en Java admite el procesamiento estadístico de lenguaje natural, clustering, clasificación de documentos, extracción de información, modelado de temas y otras aplicaciones de aprendizaje automático para texto. La especialidad de MALLET incluye herramientas sofisticadas para la clasificación de documentos, tales como rutinas eficientes para la conversión de texto. Admite una amplia variedad de algoritmos (incluidos Naïve Bayes, Decision Trees y Maximum Entropy) y un código para evaluar el rendimiento de la clase. Además, MALLET incluye herramientas para el etiquetado de secuencias y el modelado de temas.
ELKI : El entorno para el desarrollo de aplicaciones KDD es un software de minería de datos de código abierto para Java. El enfoque de ELKI es la investigación en algoritmos, enfatizando los métodos no supervisados en análisis de clusters, índices de bases de datos y detección de valores atípicos. ELKI permite una evaluación independiente de algoritmos de minería de datos y tareas de administración de datos separando los dos. Esta característica es única entre otros marcos de minería de datos como Weta o Rapidminer. ELKI también permite tipos de datos arbitrarios, formatos de archivo o medidas de distancia o similitud. Diseñado para investigadores y estudiantes, ELKI ofrece una gran colección de parámetros de algoritmos altamente configurables. Esto permite una evaluación justa y fácil y una evaluación comparativa de los algoritmos. ELKI es particularmente útil para la ciencia de datos.
sábado, 1 de septiembre de 2018
EBooks gratuitos sobre visualización de datos y Machine Learning
Quiero compartir un post de data science central donde regalan libros sobre visualización de datos y Machine Learning. Los títulos son los siguientes:
- What You Need to Know about Machine Learning
- HTML5 Graphing and Data Visualization Cookbook
- Building Machine Learning Systems with Python
- Practical Data Analysis
- Machine Learning with R
Sin más dejo link: https://www.datasciencecentral.com/profiles/blogs/free-ebooks-on-data-visualization-and-machine-learning
jueves, 30 de agosto de 2018
Data science central
Quiero recomendarles la pagina data science central donde encontraran muy buenos post y libros gratuitos y muchísima información sobre data science.
Sin más, dejo link: https://www.datasciencecentral.com/
martes, 28 de agosto de 2018
6 lenguajes de programación que debes estudiar para Data Science
Quiero compartir un artículo sobre los lenguajes de programación que debes aprender para ser el capo máximo de data science. Ya que este es mi blog y los gustos me los tengo que dar en vida, voy a atreverme a ordenar los lenguajes según la importancia con respecto al data science:
- SQL
- Python
- R
- Scala
- Java
- Julia
En que me baso? en mi opinión, es decir, no puedo se menos científico. Peroooo, tengo una explicación. SQL esta en todos lados, y si el motor de base de datos es noSQL, algún lenguaje de consulta similar a SQL (con sus restricciones) va a tener por esa razón me parece imprescindible saber SQL. Python y R son los más famosos lenguaje en data science por lejos...
Scala y Java por la sacudida que esta dando Spark. Y Julia, porque es un lenguaje que viene creciendo.
Dejo link: https://dzone.com/articles/what-is-data-science-programming-top-7-languages?utm_source=Top%205&utm_medium=email&utm_campaign=Top%205%202018-08-243
sábado, 25 de agosto de 2018
Haciendo un proyecto con scalatra y spark
Vamos a hacer un proyecto en Scala con Scalatra y Spark. La idea es hacer una Api Rest, la cual utilice Spark.
Lo primero que hacemos es el proyecto de scalatra como esta indicado aquí :
https://emanuelpeg.blogspot.com/2018/08/haciendo-un-proyecto-con-scalatra.html
Ya teniendo este proyecto agregamos las dependencias de spark y de jersey (este ultimo es necesario para el funcionamiento de los frameworks)
Es decir el buil.sbt nos va quedar así:
val ScalatraVersion = "2.6.3"
organization := "com.hexacta"
name := "Sparklatra"
version := "0.1.0-SNAPSHOT"
scalaVersion := "2.11.0"
resolvers += Classpaths.typesafeReleases
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion ,
"org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test" ,
"ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime" ,
"org.eclipse.jetty" % "jetty-webapp" % "9.4.9.v20180320" % "container" ,
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided" ,
"com.sun.jersey" % "jersey-core" % "1.19.4" ,
"com.sun.jersey" % "jersey-server" % "1.19.4" ,
"org.apache.spark" %% "spark-core" % "2.3.1"
)
enablePlugins(SbtTwirl)
enablePlugins(ScalatraPlugin)
Luego de agregar estas dependencias vamos a hacer un objeto que contenga el contexto de Spark, dado que queremos utilizar un contexto en toda nuestra aplicación y lo hacemos de la siguiente manera :
package com.miEmpresa
import org.apache.spark.{SparkConf, SparkContext}
object SparkContext {
//Create a SparkContext to initialize Spark
val conf = new SparkConf()
conf.setMaster("local")
conf.setAppName("Word Count")
val sc = new SparkContext(conf)
def getSc = {
sc
}
}
Luego de hacer esto, vamos a servlet de scalatra y agregamos el método get que cuente palabras pasadas como parámetro en la url :
get(s"/contar/:str") {
//word count
val counts = List({
params("str")
}).flatMap(line => line.split(" "))
.map(word => (word, 1))
val countsRdd = SparkContext.getSc.parallelize(counts).reduceByKey(_ + _).collect()
var result = ListBuffer[(String,Int)]()
countsRdd.foreach(line => result += line)
Ok(compact(render(result)))
}
En el get definimos que la url va a contener un string que es nuestro parámetro str. Luego hacemos un split por espacios en blanco y luego hacemos un mapa (palabra, 1). Como ultimo paso convertimos nuestro map a RDD y reducimos por palabra. Es decir el proceso sería para la linea "hola hola mundo" de la siguiente manera :
"hola hola mundo" -> split(" ") = ("hola","hola","mundo") -> map = ( ("hola", 1) , ("hola", 1) , ("mundo", 1) ) -> reduceByKey = ("hola",2), ("mundo",1)
Para probarlo primero debemos ejecutarlo con sbt y jetty. Vamos al directorio donde se encuentra el archivo build.sbt y escribimos:
sbt
--- Acá va correr un montón de cosas ---
jetty:start
Por ultimo, debemos ir a un browser y probar la url : http://localhost:8080/contar/
Como se envían los datos por el método get podemos probar con la siguiente url, por ejemplo:
"http://localhost:8080/contar/hola hola hola Mundo"
Y listo!!
jueves, 23 de agosto de 2018
3 eBooks sobre Reactive Microservices con Java
Me llego un mail de lightbend que están regalando 3 ebooks sobre Reactive en Java. Nada, solo hay que bajarlo.
Dejo link: http://inform.lightbend.com/Xlk0yJC0l000Xz02f02aNN0
Suscribirse a:
Entradas (Atom)