SlideShare a Scribd company logo
1 of 36
Spark & Cassandra 
Un vistazo al conector de DataStax 
@javituiter 
www.franciscojavierpulido.com
Anteriormente…
Apache Cassandra 
N 
N N 
N
Apache Spark 
RDD 
M 
W W W W
Alianza 
Jhonathan Ellis 
Presidente Apache Cassandra 
Matei Zaharia 
Creador de Apache Spark
¿Cuándo?
¿Cuándo?
El Conector
Características 
Tabla RDD 
N 
N N 
N 
M 
W W W W
Características 
Tabla RDD 
N 
N N 
N 
M 
W W W W 
Tabla RDD 
N 
N N 
N 
M 
W W W W 
Mapping de Filas de C* como Tuplas 
Guarda RDDs en C*(saveToCassandra) 
Soporta todos los tipos de datos de C* 
Filtrado de filas (en C*) mediante Where 
… 
Más en la web oficial.
Arquitectura 
N 
N N 
N 
M 
W W W W
Arquitectura 
M 
N 
W W W W 
N N N 
N
Ejecución 
>Spark-Shell 
Recomendado: 
· intelliJ 
· SBT 
· Scala 
Scala Java
Comunidad
Impacto
Impacto
¿Por qué?
Clientes 
A B C D E F
Demanda 
Custodia Total :: Analítica del Histórico
¿Cómo?
Interrelacionados 
Visualización 
BI Big Data 
Analítica NoSQL
Interrelacionados 
Visualización 
BI Big Data 
Analítica NoSQL 
Conector de Datastax 
Spark + Cassandra
En Práctica
Modelo de Datos C* 
//KeySpace 
CREATE KEYSPACE demoCMU WITH replication = {'class': 'SimpleStrategy', 'replication_factor':1}; 
use demoCMU; 
//Tabla 
CREATE TABLE demoCMU.asistentesCMU (id int PRIMARY KEY, nombre text, genero text); 
CREATE TABLE demoCMU.asistentesCopia (id int PRIMARY KEY, nombre text , tipo text); 
//Registros 
INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (1, 'Ale Murray', 'femenino'); 
INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (2, 'Iñigo Aldama', 'masculino'); 
INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (3, 'Antonio', 'masculino'); 
… 
INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (32, 'Jesus Arrabal', 'masculino');
Conexión al Conector (Spark-Shell) 
scala> sc.stop 
scala>:paste 
// Entering paste mode (ctrl-D to finish) 
import com.datastax.spark.connector._ //conector datastax spark+cassandra 
import org.apache.spark._ //conector Spark 
val conf = new SparkConf() //creamos una configuración 
conf.set("spark.cassandra.connection.host", "10.211.55.8") //añadimos nuestro host de C* 
conf.set("spark.home", "/opt/spark-1.0.2") //establecemos el Home de Spark 
val sc = new SparkContext("local[2]", "Cassandra Connector Test", conf) // Creamos el Contexto 
// Exiting paste mode, now interpreting.
Conexión al Conector 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/libthrift-0.9.1.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-all-2.0.9.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-clientutil-2.0.9.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-thrift-2.0.9.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-driver-core-2.0.4.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/spark-cassandra-connector_2.10-1.0.0-rc5.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/joda-time-2.3.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/joda-convert-1.2.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/httpcore-4.2.4.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-codec-1.4.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-lang-2.4.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-logging-1.1.1.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/guava-16.0.1.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/httpclient-4.2.5.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/metrics-core-3.0.2.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/netty-3.9.0.Final.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/slf4j-api-1.7.5.jar") 
sc.addJar("/opt/spark-1.0.2/lib_unmanaged/snappy-java-1.0.5.jar")
Acceso a Tabla C* 
scala> val tableCMU = sc.cassandraTable("democmu", "asistentescmu") 
tableCMU: com.datastax.spark.connector.rdd.CassandraRDD[com.datastax.spark.connector.CassandraRow] = 
CassandraRDD[0] at RDD at CassandraRDD.scala:47
Lectura (I) 
scala> tableCMU.first 
res2: com.datastax.spark.connector.CassandraRow = CassandraRow{id: 20, genero: masculino, nombre: Marcos 
VR} 
scala> tableCMU.take(2) 
res3: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 20, genero: masculino, 
nombre: Marcos VR}, CassandraRow{id: 25, genero: masculino, nombre: Sergio Canal Rodrigo}) 
scala> tableCMU.take(1)(0).get[Int]("idasistente") 
res4: Int = 20
Lectura (II) 
scala> tableCMU.toArray 
res5: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 20, genero: masculino, nombre: 
Marcos VR}, CassandraRow{id: 25, genero: masculino, nombre: Sergio Canal Rodrigo}, CassandraRow{id: 31, genero: 
masculino, nombre: jose}, CassandraRow{id: 24, genero: masculino, no… 
scala> tableCMU.count 
res6: Long = 32 
scala> tableCMU.select("nombre").toArray 
res8: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{nombre: Marcos VR}, 
CassandraRow{nombre: Sergio Canal Rodrigo}, CassandraRow{nombre: jose}, CassandraRow{n…
Copiado de Tablas 
tableCMU.map( row => ( 
row.get[Int]("id"), 
row.get[String]("nombre"), 
"cassandraRebelsMadrid” 
)).saveToCassandra("democmu","asistentescopia"
Filtros 
scala> tableCMU.filter(_.get[Int]("id")>30).toArray 
res15: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 31, genero: masculino, nombre: jose}, 
CassandraRow{id: 32, genero: masculino, nombre: Jesus Arrabal})
Importar un CSV 
scala>:paste 
// Entering paste mode (ctrl-D to finish) 
sc.textFile("file:///root/democmu.csv") 
.map(_.split(";")) 
.map( line => 
(line(0),line(1),line(2))) 
.saveToCassandra("democmu","asistentescopia") 
// Exiting paste mode, now interpreting.
MapReduce 
scala> :paste 
// Entering paste mode (ctrl-D to finish) 
tableCMU.map(_.get[String]("genero")) 
.flatMap(_.split(" ")) 
.map((_,1)) 
.reduceByKey(_+_).toArray 
// Exiting paste mode, now interpreting. 
res20: Array[(String, Int)] = Array((femenino,3), (masculino,29))
Y mucho más… 
Working with user-defined case classes and tuples 
Customizing the object mapping 
Using Connector in Java 
… 
Visita: https://github.com/datastax/spark-cassandra-connector/
¡Spark Streaming + Cassandra!
Gracias 
@javituiter 
www.franciscojavierpulido.com Fuentes: 
hkhamm (GitHub) 
Pkolaczk 
Russel Spitzer (Datastax) 
Martin Van Ryswyk (DataStax)

More Related Content

Similar to Integración de DataStax de Spark con Cassandra

UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Videoconferencias UTPL
 
Instalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuInstalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntu
David Vevelas
 
Tm13 introduccion al_sql
Tm13 introduccion al_sqlTm13 introduccion al_sql
Tm13 introduccion al_sql
Julio Pari
 
consultas de visual estudio sistema de ventas
 consultas de visual estudio  sistema de  ventas consultas de visual estudio  sistema de  ventas
consultas de visual estudio sistema de ventas
Group Lliuya
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
guest0c9485
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
guest0c9485
 

Similar to Integración de DataStax de Spark con Cassandra (20)

BigData - NoSQL
BigData -  NoSQL BigData -  NoSQL
BigData - NoSQL
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
Práctica SQL en MYSQL
Práctica SQL en MYSQLPráctica SQL en MYSQL
Práctica SQL en MYSQL
 
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
 
Creando su primera aplicación de Big Data en AWS
Creando su primera aplicación de Big Data en AWSCreando su primera aplicación de Big Data en AWS
Creando su primera aplicación de Big Data en AWS
 
Primeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid MeetupPrimeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid Meetup
 
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
 
Guiapractica de bd completa
Guiapractica de bd completaGuiapractica de bd completa
Guiapractica de bd completa
 
Presentacion sobre cassandra
Presentacion sobre cassandraPresentacion sobre cassandra
Presentacion sobre cassandra
 
Mysql
MysqlMysql
Mysql
 
Instalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuInstalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntu
 
Laboratorio de XML en DB2
Laboratorio de XML en DB2Laboratorio de XML en DB2
Laboratorio de XML en DB2
 
Creando su primera aplicación de Big Data en AWS
Creando su primera aplicación de Big Data en AWSCreando su primera aplicación de Big Data en AWS
Creando su primera aplicación de Big Data en AWS
 
Tm13 introduccion al_sql
Tm13 introduccion al_sqlTm13 introduccion al_sql
Tm13 introduccion al_sql
 
consultas de visual estudio sistema de ventas
 consultas de visual estudio  sistema de  ventas consultas de visual estudio  sistema de  ventas
consultas de visual estudio sistema de ventas
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Sentencias sql
Sentencias sql Sentencias sql
Sentencias sql
 
Sentencias Sql
Sentencias SqlSentencias Sql
Sentencias Sql
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 

Recently uploaded

tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
susafy7
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
Ricardo705519
 

Recently uploaded (20)

Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERUQUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
Control estadistico de procesos Primera parte.pdf
Control estadistico de procesos Primera parte.pdfControl estadistico de procesos Primera parte.pdf
Control estadistico de procesos Primera parte.pdf
 
Presentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónPresentacion de la ganaderia en la región
Presentacion de la ganaderia en la región
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVOESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
Sistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptxSistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptx
 
Trazos paileros para realizar trazos, cortes y calculos.pptx
Trazos paileros para realizar trazos, cortes y calculos.pptxTrazos paileros para realizar trazos, cortes y calculos.pptx
Trazos paileros para realizar trazos, cortes y calculos.pptx
 

Integración de DataStax de Spark con Cassandra

  • 1. Spark & Cassandra Un vistazo al conector de DataStax @javituiter www.franciscojavierpulido.com
  • 4. Apache Spark RDD M W W W W
  • 5. Alianza Jhonathan Ellis Presidente Apache Cassandra Matei Zaharia Creador de Apache Spark
  • 9. Características Tabla RDD N N N N M W W W W
  • 10. Características Tabla RDD N N N N M W W W W Tabla RDD N N N N M W W W W Mapping de Filas de C* como Tuplas Guarda RDDs en C*(saveToCassandra) Soporta todos los tipos de datos de C* Filtrado de filas (en C*) mediante Where … Más en la web oficial.
  • 11. Arquitectura N N N N M W W W W
  • 12. Arquitectura M N W W W W N N N N
  • 13. Ejecución >Spark-Shell Recomendado: · intelliJ · SBT · Scala Scala Java
  • 18. Clientes A B C D E F
  • 19. Demanda Custodia Total :: Analítica del Histórico
  • 21. Interrelacionados Visualización BI Big Data Analítica NoSQL
  • 22. Interrelacionados Visualización BI Big Data Analítica NoSQL Conector de Datastax Spark + Cassandra
  • 24. Modelo de Datos C* //KeySpace CREATE KEYSPACE demoCMU WITH replication = {'class': 'SimpleStrategy', 'replication_factor':1}; use demoCMU; //Tabla CREATE TABLE demoCMU.asistentesCMU (id int PRIMARY KEY, nombre text, genero text); CREATE TABLE demoCMU.asistentesCopia (id int PRIMARY KEY, nombre text , tipo text); //Registros INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (1, 'Ale Murray', 'femenino'); INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (2, 'Iñigo Aldama', 'masculino'); INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (3, 'Antonio', 'masculino'); … INSERT INTO demoCMU.asistentesCMU (id, nombre, genero) VALUES (32, 'Jesus Arrabal', 'masculino');
  • 25. Conexión al Conector (Spark-Shell) scala> sc.stop scala>:paste // Entering paste mode (ctrl-D to finish) import com.datastax.spark.connector._ //conector datastax spark+cassandra import org.apache.spark._ //conector Spark val conf = new SparkConf() //creamos una configuración conf.set("spark.cassandra.connection.host", "10.211.55.8") //añadimos nuestro host de C* conf.set("spark.home", "/opt/spark-1.0.2") //establecemos el Home de Spark val sc = new SparkContext("local[2]", "Cassandra Connector Test", conf) // Creamos el Contexto // Exiting paste mode, now interpreting.
  • 26. Conexión al Conector sc.addJar("/opt/spark-1.0.2/lib_unmanaged/libthrift-0.9.1.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-all-2.0.9.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-clientutil-2.0.9.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-thrift-2.0.9.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/cassandra-driver-core-2.0.4.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/spark-cassandra-connector_2.10-1.0.0-rc5.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/joda-time-2.3.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/joda-convert-1.2.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/httpcore-4.2.4.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-codec-1.4.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-lang-2.4.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/commons-logging-1.1.1.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/guava-16.0.1.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/httpclient-4.2.5.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/metrics-core-3.0.2.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/netty-3.9.0.Final.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/slf4j-api-1.7.5.jar") sc.addJar("/opt/spark-1.0.2/lib_unmanaged/snappy-java-1.0.5.jar")
  • 27. Acceso a Tabla C* scala> val tableCMU = sc.cassandraTable("democmu", "asistentescmu") tableCMU: com.datastax.spark.connector.rdd.CassandraRDD[com.datastax.spark.connector.CassandraRow] = CassandraRDD[0] at RDD at CassandraRDD.scala:47
  • 28. Lectura (I) scala> tableCMU.first res2: com.datastax.spark.connector.CassandraRow = CassandraRow{id: 20, genero: masculino, nombre: Marcos VR} scala> tableCMU.take(2) res3: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 20, genero: masculino, nombre: Marcos VR}, CassandraRow{id: 25, genero: masculino, nombre: Sergio Canal Rodrigo}) scala> tableCMU.take(1)(0).get[Int]("idasistente") res4: Int = 20
  • 29. Lectura (II) scala> tableCMU.toArray res5: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 20, genero: masculino, nombre: Marcos VR}, CassandraRow{id: 25, genero: masculino, nombre: Sergio Canal Rodrigo}, CassandraRow{id: 31, genero: masculino, nombre: jose}, CassandraRow{id: 24, genero: masculino, no… scala> tableCMU.count res6: Long = 32 scala> tableCMU.select("nombre").toArray res8: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{nombre: Marcos VR}, CassandraRow{nombre: Sergio Canal Rodrigo}, CassandraRow{nombre: jose}, CassandraRow{n…
  • 30. Copiado de Tablas tableCMU.map( row => ( row.get[Int]("id"), row.get[String]("nombre"), "cassandraRebelsMadrid” )).saveToCassandra("democmu","asistentescopia"
  • 31. Filtros scala> tableCMU.filter(_.get[Int]("id")>30).toArray res15: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{id: 31, genero: masculino, nombre: jose}, CassandraRow{id: 32, genero: masculino, nombre: Jesus Arrabal})
  • 32. Importar un CSV scala>:paste // Entering paste mode (ctrl-D to finish) sc.textFile("file:///root/democmu.csv") .map(_.split(";")) .map( line => (line(0),line(1),line(2))) .saveToCassandra("democmu","asistentescopia") // Exiting paste mode, now interpreting.
  • 33. MapReduce scala> :paste // Entering paste mode (ctrl-D to finish) tableCMU.map(_.get[String]("genero")) .flatMap(_.split(" ")) .map((_,1)) .reduceByKey(_+_).toArray // Exiting paste mode, now interpreting. res20: Array[(String, Int)] = Array((femenino,3), (masculino,29))
  • 34. Y mucho más… Working with user-defined case classes and tuples Customizing the object mapping Using Connector in Java … Visita: https://github.com/datastax/spark-cassandra-connector/
  • 35. ¡Spark Streaming + Cassandra!
  • 36. Gracias @javituiter www.franciscojavierpulido.com Fuentes: hkhamm (GitHub) Pkolaczk Russel Spitzer (Datastax) Martin Van Ryswyk (DataStax)

Editor's Notes

  1. · Distribuida · Peer to peer · Tolerante a fallos · Escala linealmente · Sencilla de utilizar
  2. · Motor de procesamiento de grandes volúmenes de datos en memoria · Arquitectura maestro esclavo: Master & Workers · Sencillo de programar · RDDs: Resilient Distributed Datasets (Lineage) · Es compatible con HDFS, CSVs, Parquet y con Cassandra.
  3. · En Mayo anunciaron datastax y databricks que unían lazos
  4. · El conector se lanzó a mediados de Julio · Gran impacto en la comunidad · Desde entonces hemos estado trabajando con el
  5. · La principal: De tabla a RDD
  6. · Varias tablas en RDDs
  7. · Cada Spark Executor mantiene una conexión con el cluster de C* · Colocar cada nodo de Cassandra en el mismo servidor de cada worker de Spark puede disminuir la latencia entre ambos (no garantizado).