SlideShare una empresa de Scribd logo
1 de 72
Descargar para leer sin conexión
Apache	
  Spark	
  Meetup	
  
Introducción	
  a	
  Scala	
  
#ApacheSparkMX	
  
@isragaytan	
  
israel.gaytan@vitatronix.net	
  
isragaytan@gmail.com	
  
Hands	
  –	
  On	
  	
  
•  Instalación	
  en	
  su	
  sistema	
  
•  Introducción	
  a	
  Scala	
  
•  Ejercicios	
  con	
  Scala	
  
•  Break	
  
•  Introducción	
  a	
  Apache	
  Spark	
  
•  Ejemplo	
  de	
  Scala	
  con	
  Apache	
  Spark	
  
•  Preguntas	
  y	
  Respuestas	
  
Instalación	
  	
  
hGps://spark.apache.org/downloads.html	
  
Instalación	
  en	
  su	
  sistema	
  
•  Descargar	
  de	
  ser	
  posible	
  en	
  	
  
hGps://spark.apache.org/downloads.html	
  
	
  
•  Descargar	
  la	
  versión	
  1.3.1	
  prebuilt	
  para	
  
Hadoop	
  2.6	
  
•  Crear	
  una	
  carpeta	
  en	
  su	
  sistema	
  spark1.3	
  
•  Descomprimir	
  la	
  carpeta	
  y	
  renombrarla	
  a	
  
spark1.3	
  
Probando	
  instalación	
  
•  Dirigirse	
  a	
  su	
  carpeta	
  de	
  instalación	
  de	
  spark1.3	
  
•  Ejecutar	
  bin/spark-­‐shell	
  
•  Se	
  abrirá	
  el	
  shell	
  de	
  Apache	
  Spark	
  con	
  Scala	
  
	
  scala	
  >	
  	
  
	
  
Nota:	
  Scala	
  es	
  completamente	
  descargable	
  de	
  
hGp://www.scala-­‐lang.org/download/all.html	
  
Introducción	
  a	
  Scala	
  
•  Scala	
  es	
  un	
  lenguaje	
  orientado	
  a	
  objetos	
  (OOP)	
  y	
  
de	
  programación	
  funcional	
  (FP)	
  
•  Compila	
  a	
  archivos	
  class	
  que	
  empaquetamos	
  
como	
  JAR	
  (Java	
  Archive)	
  (Maven	
  o	
  SBT)	
  
•  Corre	
  sobre	
  la	
  	
  Java	
  Virtual	
  Machine	
  
•  Creado	
  por	
  Mar^n	
  Odersky	
  
•  Cada	
  variable	
  es	
  un	
  objeto	
  y	
  cada	
  operador	
  es	
  un	
  
método	
  
•  hGp://scala-­‐lang.org	
  
•  Como	
  corre	
  sobre	
  la	
  JVM	
  nos	
  permite	
  usar	
  las	
  
librerías	
  de	
  Java	
  
•  SCALA	
  CAMBIARÁ	
  LA	
  MANERA	
  EN	
  QUE	
  
PIENSAS	
  COMO	
  PROGRAMAR	
  
•  Permite	
  escribir	
  código	
  de	
  manera	
  concisa	
  
•  No	
  te	
  desesperes	
  si	
  no	
  en^endes	
  al	
  principio	
  	
  
	
  
Introducción	
  a	
  Scala	
  
Cadenas	
  
•  Abre	
  tu	
  prompt	
  de	
  Apache	
  Spark	
  	
  (spark1.3)	
  
	
  	
  	
  bin/spark-­‐shell	
  
	
  
scala	
  >	
  “Hola	
  Mundo”	
  
res0:	
  String	
  =	
  Hola	
  Mundo	
  
	
  
scala>	
  "Hola	
  scala".getClass.getName	
  
res2:	
  String	
  =	
  java.lang.String	
  
	
  
	
  
Cadenas	
  	
  
scala>	
  val	
  s	
  =	
  "Hola	
  Scala	
  Meetup"	
  
s:	
  String	
  =	
  Hola	
  Scala	
  Meetup	
  
	
  
scala>	
  s.length	
  
res4:	
  Int	
  =	
  17	
  
	
  
scala>	
  s.foreach(println)	
  
H	
  
o	
  
l	
  
Cadenas	
  
•  Podemos	
  u^lizar	
  métodos	
  funcionales	
  como	
  
filter	
  ej:	
  
scala>	
  var	
  result	
  =	
  s.filter(_	
  !=	
  'l')	
  
result:	
  String	
  =	
  Hoa	
  Scaa	
  Meetup	
  
Ver	
  (StringOps,	
  StringLike,	
  WrappedString)	
  
Cadenas	
  
scala>	
  s1.drop(4).take(2).capitalize	
  
res6:	
  String	
  =	
  Up	
  
	
  
scala>	
  val	
  s3	
  =	
  "hola"	
  
s3:	
  String	
  =	
  hola	
  
	
  
scala>	
  s3	
  ==	
  "hola"	
  
res8:	
  Boolean	
  =	
  true	
  
	
  
	
  
Cadenas	
  
scala>	
  val	
  mensaje	
  =	
  "Apache	
  Spark	
  Meetup".map(c	
  =>c.toUpper)	
  
mensaje:	
  String	
  =	
  APACHE	
  SPARK	
  MEETUP	
  
	
  
Pero	
  también	
  podemos	
  usar	
  el	
  carácter	
  mágico	
  _	
  para	
  que	
  nuestro	
  código	
  se	
  
vea	
  mucho	
  más	
  limpio	
  
	
  
scala>	
  val	
  mensaje2	
  =	
  "Apache	
  Spark	
  Meetup".map(_.toUpper)	
  
mensaje2:	
  String	
  =	
  APACHE	
  SPARK	
  MEETUP	
  
	
  
A	
  el	
  método	
  map	
  se	
  le	
  pasan	
  funciones	
  (programación	
  funcional)	
  
	
  
	
  
	
  
	
  
Cadenas	
  
•  Ver	
  como	
  funcionan	
  las	
  expresiones	
  regulares	
  
scala>	
  val	
  address	
  =	
  "Dr	
  Levante	
  1234	
  Edif	
  302	
  ".replaceAll("[0-­‐9]","x")	
  
address:	
  String	
  =	
  "Dr	
  Levante	
  xxxx	
  Edif	
  xxx	
  ”	
  
	
  
	
  
Clases	
  implicitas	
  
•  Las	
  clases	
  implícitas	
  deben	
  ser	
  definidas	
  en	
  un	
  
ámbito	
  donde	
  las	
  definiciones	
  de	
  método	
  son	
  
permi^das	
  (Scala	
  2.10)	
  
	
  
•  Permiten	
  agregar	
  nuestros	
  propios	
  métodos	
  a	
  
objetos	
  sin	
  tener	
  que	
  extenderlos	
  
	
  
	
  
	
  
Clases	
  Implícitas	
  
package	
  com.meetup.u^ls	
  
	
  
object	
  U^lidades{	
  
	
  	
  implicit	
  class	
  IncrementarCaracter(val	
  s:String){	
  
	
  def	
  incrementar	
  =	
  s.map(c	
  =>	
  (c	
  +1).toChar)	
  
}	
  
}	
  
	
  
package	
  foo.bar	
  
	
  
import	
  com.meetup.u^ls.U^lidades._	
  
	
  
object	
  Main	
  extends	
  App{	
  
println(“ABC”.incrementar)	
  
}	
  
	
  
Números	
  
Char	
  -­‐16	
  bit	
  unsigned	
  
Byte	
  -­‐	
  8	
  Bit	
  signed	
  value	
  
Short	
  –	
  16	
  bit	
  signed	
  value	
  
Int	
  –	
  32	
  bit	
  signed	
  value	
  	
  
Long	
  -­‐	
  64	
  bit	
  signed	
  value	
  
Float	
  –	
  32	
  bit	
  IEEE	
  754	
  single	
  precision	
  float	
  
Double	
  –	
  64	
  bit	
  IEEE	
  754	
  single	
  precision	
  float	
  
Números	
  
“100”.toInt	
  	
  -­‐	
  Usar	
  métodos	
  to	
  para	
  cas^ng	
  
“100”.toFloat	
  ….	
  
	
  
Scala	
  no	
  ^ene	
  operadores	
  ++	
  	
  ni	
  –	
  
val	
  es	
  inmutable	
  
Scala	
  >	
  var	
  a	
  =	
  1	
  
	
  
	
  
Números	
  
scala>	
  val	
  a	
  =	
  1	
  
a:	
  Int	
  =	
  1	
  
	
  
scala>	
  a	
  +=	
  1	
  
<console>:22:	
  error:	
  value	
  +=	
  is	
  not	
  a	
  member	
  of	
  Int	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  a	
  +=	
  1	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ^	
  
	
  
scala>	
  var	
  b	
  =	
  1	
  
b:	
  Int	
  =	
  1	
  
	
  
scala>	
  b+=1	
  
	
  
scala>	
  b	
  
res11:	
  Int	
  =	
  2	
  
 val	
  r	
  =	
  scala.u^l.Random	
  
r.nextInt	
  
	
  
Podemos	
  limitar	
  la	
  generación	
  
	
  
r.nextInt(100)	
  
Números	
  
val	
  r	
  =	
  1	
  to	
  100	
  
	
  
val	
  j	
  =	
  1	
  to	
  100	
  by	
  2	
  
	
  
val	
  x	
  =	
  (1	
  to	
  10).toList	
  
	
  
val	
  z	
  =	
  (1	
  to	
  100).toArray	
  
Números	
  
Estructuras	
  de	
  Control	
  
•  If/then/else	
  es	
  similar	
  a	
  Java	
  
•  Pueden	
  regresar	
  un	
  resultado	
  
	
  
val	
  x	
  =	
  if(a)	
  y	
  else	
  b	
  
	
  
scala>	
  val	
  x	
  =	
  if("a"=="a")	
  9	
  else	
  7	
  
x:	
  Int	
  =	
  9	
  
	
  
	
  
•  for	
  y	
  foreach	
  
•  Nos	
  sirven	
  para	
  hacer	
  ciclos	
  y	
  sobre	
  todo	
  iterar	
  
en	
  colecciones	
  (List,	
  Array,	
  Range)	
  
scala>	
  val	
  samp	
  =	
  List("isra","memo","paco")	
  
samp:	
  List[String]	
  =	
  List(isra,	
  memo,	
  paco)	
  
	
  
scala>	
  for(n	
  <-­‐	
  samp)	
  yield	
  n.capitalize	
  
res20:	
  List[String]	
  =	
  List(Isra,	
  Memo,	
  Paco)	
  
	
  
Estructuras	
  de	
  Control	
  
scala>	
  samp.foreach(println)	
  
isra	
  
memo	
  
Paco	
  
•  Si	
  se	
  requiere	
  más	
  lineas	
  	
  
samp.foreach{	
  e=>	
  
	
  	
  	
  	
  	
  |	
  val	
  nuevo	
  =	
  e.toUpperCase	
  
	
  	
  	
  	
  	
  |	
  println(nuevo)	
  
	
  	
  	
  	
  	
  |	
  }	
  
	
  
	
  
Estructuras	
  de	
  Control	
  
Estructuras	
  de	
  Control	
  
•  Es	
  muy	
  importante	
  saber	
  como	
  los	
  ciclos	
  son	
  
trasladados	
  por	
  el	
  compilador	
  
•  for	
  loop	
  que	
  itera	
  sobre	
  una	
  colección	
  se	
  
transforma	
  en	
  foreach	
  
•  for	
  loop	
  con	
  un	
  guard	
  se	
  traslada	
  a	
  una	
  
secuencia	
  de	
  withFilter	
  seguida	
  de	
  un	
  foreach	
  
•  for	
  loop	
  con	
  un	
  yield	
  se	
  traslada	
  a	
  un	
  map	
  e	
  la	
  
colección	
  
Estructuras	
  de	
  Control	
  
scala>	
  val	
  i	
  =	
  5	
  
i:	
  Int	
  =	
  5	
  
	
  
scala>	
  val	
  month	
  	
  =	
  i	
  match{	
  
	
  	
  	
  	
  	
  |	
  case	
  1	
  =>	
  "enero"	
  
	
  	
  	
  	
  	
  |	
  case	
  2	
  =>	
  "febrero"	
  
	
  	
  	
  	
  	
  |	
  case	
  3	
  =>	
  "marzo"	
  
	
  	
  	
  	
  	
  |	
  case	
  4	
  =>	
  "Abril"	
  
	
  	
  	
  	
  	
  |	
  case	
  5	
  =>	
  "Mayo”	
  
	
  	
  	
  	
  	
  |	
  case	
  _	
  =>	
  	
  “Mes	
  inválido”	
  
	
  
	
  	
  	
  	
  	
  |	
  }	
  
month:	
  String	
  =	
  Mayo	
  
Métodos	
  
•  Los	
  métodos	
  los	
  definimos	
  como	
  def	
  
	
  
scala>	
  def	
  square(x:Int):	
  Int	
  =	
  x	
  *	
  x	
  
square:	
  (x:	
  Int)Int	
  
scala>	
  square(5)	
  
res33:	
  Int	
  =	
  25	
  
	
  
Colecciones	
  
•  Las	
  colecciones	
  en	
  escala	
  son	
  amplias	
  y	
  debemos	
  
aprender	
  a	
  u^lizarlas	
  dependiendo	
  el	
  contexto	
  de	
  
nuestro	
  requerimiento	
  
•  List,	
  Array,	
  Map	
  y	
  Set	
  
•  Métodos	
  como	
  filter,	
  foreach,	
  map	
  y	
  reduceLe„	
  
aplican	
  a	
  las	
  colecciones	
  ^enen	
  loops	
  dentro	
  de	
  
sus	
  algoritmos	
  	
  
•  El	
  predicado	
  es	
  un	
  método	
  o	
  función	
  anónima	
  
que	
  toma	
  uno	
  o	
  más	
  parámetros	
  y	
  regresa	
  un	
  
valor	
  booleano	
  
Colecciones	
  
Ej:	
  
(i:int)	
  =>	
  i	
  %	
  2	
  ==	
  0	
  	
  	
  	
  	
  	
  	
  //función	
  anónima	
  
	
  
_	
  %	
  2	
  ==	
  0	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
val	
  list	
  =	
  List.range(1,20)	
  
val	
  events	
  =	
  list.filter(_	
  %	
  2	
  ==	
  0)	
  
	
  
	
  
Colecciones	
  
Traversable	
  
Iterable	
  
Seq	
  
IndexedSeq	
   LinearSeq	
  
Set	
   Map	
  
Colecciones	
  
	
  
Sequence	
  :	
  es	
  una	
  colección	
  lineal	
  de	
  elementos	
  
que	
  serán	
  indexados	
  
	
  
Map:	
  Con^ene	
  una	
  colección	
  key/value	
  como	
  un	
  
Java	
  Map,	
  Ruby	
  Hash	
  o	
  un	
  diccionario	
  en	
  Python	
  
	
  
Set	
  :es	
  una	
  colección	
  que	
  con^ene	
  elementos	
  sin	
  
duplicar	
  
	
  
Colecciones	
  
•  Escoger	
  un	
  Sequence..¿La	
  secuencia	
  debe	
  ser	
  
indexada	
  o	
  implementada	
  como	
  una	
  linked	
  list?	
  
•  ¿Queremos	
  una	
  colección	
  mutable	
  o	
  inmutable?	
  
•  Imutables:List,	
  Queue,	
  Range,Stack,	
  Stream,	
  
String,	
  Vector	
  
•  Mutables:Array,	
  ArrayBuffer,ArrayStack,	
  
LinkedList,ListBuffer,	
  MutableLIst,	
  Queue,	
  Stack,	
  
StringBuilder	
  
Colecciones	
  
•  Escoger	
  Map	
  es	
  más	
  sencillo	
  
•  Puedo	
  escoger	
  un	
  SortedMap	
  que	
  almacenará	
  
elementos	
  ordenados	
  por	
  llave	
  
•  LinkedHashMap	
  para	
  almacenar	
  elementos	
  en	
  
orden	
  de	
  inserción	
  
•  HashMap,LinkedHashMap,ListMap,Map,Sorte
dMap,TreeMap,WeakHashMap	
  
Colecciones	
  
•  Escoger	
  un	
  set	
  es	
  similar	
  a	
  un	
  map	
  
•  Existen	
  clases	
  mutables	
  e	
  inmutables	
  
•  BitSet,HashSet,LinkedHashSet,ListSet,TreeSet,
Set,SortedSet	
  
•  Algunas	
  otras	
  colecciones	
  
(Enumera^on,Iterator,Op^on,Tuple)	
  
Colecciones	
  
Un	
  método	
  de	
  transformación	
  es	
  un	
  método	
  que	
  
construye	
  una	
  colección	
  a	
  par^r	
  de	
  una	
  existente.	
  
Esta	
  incluye	
  métodos	
  como	
  map,	
  filter,	
  reverse	
  etc.	
  
Existen	
  colecciones	
  strict	
  y	
  lazy.	
  
Strict	
  aloja	
  los	
  elementos	
  inmediatamente	
  en	
  
memoria	
  
Lazy	
  no	
  aloja	
  los	
  elementos	
  inmediatamente	
  y	
  las	
  
transformaciones	
  no	
  construyen	
  nuevos	
  elementos	
  
hasta	
  que	
  se	
  ejecutan.	
  
	
  
Colecciones	
  
•  Métodos	
  de	
  filtrado:	
  
collect,diff,dis^nct,drop,dropWhile,filter,filterNot,find,foldLe„,fo
ldRight,head,headOp^on.	
  
•  Métodos	
  de	
  transformación:	
  
diff,dis^nct,collect,flatMap,map,reverse,sortWith,takeWhile,zip,	
  
zipWithIndex	
  
•  Métodos	
  de	
  agrupación:	
  
groupBy,par^^on,sliding,span,splitAt,unzip	
  
•  Métodos	
  matemá^cos	
  y	
  de	
  información:	
  
contains,containsSlice,count,endWith,exist,find,forAll,indexOf…
max,min,product,size,sum.	
  
Colecciones	
  
scala>	
  days.zipWithIndex.foreach{	
  
	
  	
  	
  	
  	
  |	
  case(day,count)	
  =>	
  println(s"$count	
  es	
  $day")	
  
	
  	
  	
  	
  	
  |	
  }	
  
0	
  es	
  Lunes	
  
1	
  es	
  Martes	
  
2	
  es	
  Miércoles	
  
3	
  es	
  Jueves	
  
4	
  es	
  Viernes	
  
Colecciones	
  
scala>	
  val	
  frutas	
  =	
  
List("pera","manzana","plátano","mango","uva")	
  
frutas:	
  List[String]	
  =	
  List(pera,	
  manzana,	
  plátano,	
  
mango,	
  uva)	
  
	
  
scala>	
  frutas.filter(_.length	
  <	
  6).map(_.toUpperCase)	
  
res28:	
  List[String]	
  =	
  List(PERA,	
  MANGO,	
  UVA)	
  
scala>	
  val	
  listas=List(List(1,2),List(3,4))	
  
listas:	
  List[List[Int]]	
  =	
  List(List(1,	
  2),	
  List(3,	
  4))	
  
	
  
scala>	
  val	
  resultado	
  =	
  listas.flaGen	
  
resultado:	
  List[Int]	
  =	
  List(1,	
  2,	
  3,	
  4)	
  
Colecciones	
  
scala>	
  def	
  toInt(in:String):Op^on[Int]={	
  
	
  	
  	
  	
  	
  |	
  try{	
  
	
  	
  	
  	
  	
  |	
  Some(Integer.parseInt(in.trim))	
  
	
  	
  	
  	
  	
  |	
  }	
  
	
  	
  	
  	
  	
  |	
  catch{	
  
	
  	
  	
  	
  	
  |	
  case	
  e:Excep^on	
  =>	
  None	
  
	
  	
  	
  	
  	
  |	
  }	
  
	
  	
  	
  	
  	
  |	
  }	
  
toInt:	
  (in:	
  String)Op^on[Int]	
  
	
  
scala>	
  fms.flatMap(toInt)	
  
res32:	
  List[Int]	
  =	
  List(1,	
  2,	
  5)	
  
Colecciones	
  
Colecciones	
  
Ejercicios:	
  
-­‐  Filtrar	
  los	
  mayores	
  a	
  4	
  
-­‐  Filtrar	
  los	
  mayores	
  a	
  5	
  
-­‐  Sumar	
  los	
  elementos	
  de	
  la	
  colección	
  
Mayor	
  información	
  :	
  
hGp://www.scala-­‐lang.org/api/2.10.4/
index.html#scala.collec^on.Seq	
  
Programación	
  Funcional	
  
•  Se	
  construyen	
  programas	
  usando	
  funciones	
  puras	
  
•  Las	
  funciones	
  no	
  ^enen	
  efectos	
  colaterales	
  
•  Modificar	
  una	
  variable,	
  una	
  estructura,	
  
establecer	
  un	
  campo	
  en	
  un	
  objeto,	
  arrojar	
  una	
  
excepción,	
  imprimir	
  en	
  la	
  consola,	
  leer	
  o	
  escribir	
  
un	
  archivo,	
  dibujar	
  en	
  pantalla	
  
•  Programación	
  funcional	
  es	
  una	
  restricción	
  en	
  
COMO	
  escribimos	
  programas	
  pero	
  no	
  en	
  lo	
  QUE	
  
nuestros	
  programas	
  pueden	
  expresar.	
  
Y	
  ahora…	
  
Spark	
  101	
  (Historia)	
  
Ecosistema	
  Big	
  Data	
  
	
  
	
  
	
  
	
  
	
  
Spark	
  101	
  
•  Map	
  reduce	
  es	
  el	
  modelo	
  de	
  programación	
  y	
  
el	
  corazón	
  de	
  Hadoop	
  
•  Toma	
  datos	
  de	
  manera	
  masiva	
  y	
  los	
  divide	
  a	
  
través	
  de	
  un	
  número	
  de	
  nodos	
  en	
  un	
  clúster	
  
•  Tiene	
  dos	
  fases	
  la	
  fase	
  Map	
  y	
  la	
  fase	
  Reduce	
  
•  Se	
  programa	
  en	
  Java	
  y	
  se	
  envía	
  de	
  manera	
  
distribuida	
  al	
  clúster	
  (también	
  se	
  puede	
  en	
  
Python,	
  R,	
  .NET	
  a	
  través	
  de	
  Hadoop	
  
Streaming)	
  
Spark	
  101	
  (WordCount)	
  
Mapper	
   Reducer	
  
Spark	
  101	
  
Driver	
  
Spark	
  101	
  
•  Es	
  di‹cil	
  programar	
  en	
  Map	
  Reduce	
  
•  Cuellos	
  de	
  botellas	
  de	
  performance	
  
•  Existen	
  abstracciones	
  como	
  Hive	
  y	
  Pig	
  
•  Aún	
  así	
  es	
  complicado	
  desarrollar	
  
Spark	
  
•  Spark	
  es	
  un	
  motor	
  de	
  cómputo	
  DISTRIBUIDO	
  
•  Op^mizado	
  para	
  velocidad,	
  fácil	
  uso	
  e	
  implementación	
  de	
  análisis	
  
sofis^cado.	
  
•  Es	
  un	
  proyecto	
  open	
  source	
  de	
  APACHE	
  
•  APIS	
  en	
  Python,	
  Java	
  y	
  Scala	
  	
  …R	
  en	
  Spark	
  1.4!	
  
•  Lo	
  u^lizamos	
  para	
  tareas	
  de	
  ciencia	
  en	
  datos	
  
•  Lo	
  u^lizamos	
  para	
  aplicaciones	
  de	
  procesamiento	
  a	
  gran	
  escala	
  
(terabytes	
  o	
  petabytes	
  de	
  datos	
  =	
  BIG	
  DATA)	
  
Spark	
  
 Resilient	
  Distributed	
  Datasets	
  (RDDs)	
  
-­‐Abstracción	
  de	
  programación	
  de	
  SPARK	
  
-­‐Se	
  desarrollan	
  programas	
  en	
  términos	
  de	
  
transformaciones	
  	
  y	
  acciones	
  (Dataflows)	
  
-­‐Colección	
  de	
  objetos	
  que	
  pueden	
  ser	
  almacenados	
  en	
  
memoria	
  o	
  en	
  disco	
  a	
  través	
  de	
  un	
  clúster	
  
-­‐Estan	
  desarrollados	
  para	
  transformaciones	
  en	
  paralelo	
  
(map,	
  filter,	
  etc)	
  
-­‐	
  Los	
  RDDs	
  pueden	
  ser	
  almacenados	
  en	
  memoría,	
  en	
  
disco	
  u	
  ambos.	
  
-­‐Tolerancia	
  a	
  fallos	
  
Spark	
  
//Spark	
  context	
  sc	
  variable	
  especial	
  de	
  contexto	
  
//RDD	
  Base	
  
scala>	
  var	
  data	
  =	
  sc.textFile(“sample-­‐syslog.log")	
  
	
  
//Transformación	
  =	
  las	
  transformaciones	
  son	
  “lazy”	
  	
  
val	
  info	
  =	
  data.filter(_.contains("INFO"))	
  
info.cache()	
  
	
  
//Acciones	
  =	
  Hasta	
  aquí	
  se	
  ejecutan	
  las	
  	
  
val	
  n1=	
  info.filter(_.contains(“Alice”).count())	
  
Val	
  n2=info.filter(_.contains(“Chuck”).count())	
  
	
  
Spark	
  
Spark	
  
•  Formatos:	
  
Archivos	
  de	
  texto,	
  JSON,CSV,TSV,SequenceFiles,	
  
ObjectFiles,Formatos	
  de	
  entrada/salida	
  de	
  
Hadoop	
  
	
  
Amazon	
  S3,HDFS,Avro,Parquet,Cassandra,	
  
Hbase,Mongo,Elas^cSearch	
  etc.	
  
•  Spark	
  traza	
  una	
  grafo	
  lineal	
  de	
  
transformaciones	
  y	
  acciones	
  
•  El	
  driver	
  se	
  encarga	
  de	
  enviar	
  nuestra	
  
aplicación	
  a	
  todos	
  los	
  nodos	
  con	
  este	
  grafo	
  
•  Se	
  enviaran	
  instrucciones	
  a	
  los	
  workers	
  para	
  
ser	
  ejecutadas	
  (archivos	
  de	
  texto,	
  hdfs	
  etc)	
  
•  Cada	
  worker	
  leerá	
  los	
  datos	
  y	
  hará	
  
transformaciones	
  y	
  hará	
  cache	
  de	
  los	
  datos	
  
Spark	
  tras	
  bambalinas	
  
Spark	
  
•  RDDS	
  ^enen	
  dos	
  ^pos	
  de	
  operaciones	
  
•  TRANSFORMACIONES:	
  Las	
  transformaciones	
  
siempre	
  me	
  regresarán	
  un	
  nuevo	
  RDD	
  y	
  no	
  
son	
  procesadas	
  inmediatamente	
  
	
  
•  ACCIONES:Las	
  acciones	
  siempre	
  me	
  
devolverán	
  un	
  resultado	
  (se	
  regresan	
  al	
  driver)	
  
Spark	
  Clúster	
  
Spark	
  
Driver	
  
Worker	
  
Worker	
  
Worker	
  
Bloque	
  1	
  
Bloque	
  2	
  
Bloque	
  3	
  
El	
  driver	
  se	
  encarga	
  de	
  enviar	
  nuestra	
  
aplicación	
  a	
  todos	
  los	
  nodos	
  (workers)	
  
 	
  
Driver	
  
Worker	
  
Worker	
  
Worker	
  
Bloque	
  2	
  
Bloque	
  3	
  
Spark	
  
Bloque	
  1	
  
Cache	
  1	
  
Cache	
  2	
  
Cache	
  3	
  
Una	
  vez	
  que	
  los	
  procesa	
  los	
  pone	
  en	
  
cache	
  por	
  cada	
  worker	
  
scala>	
  var	
  data	
  =	
  sc.textFile(“sample-­‐syslog.log")	
  
	
  
//Transformación	
  =	
  las	
  transformaciones	
  son	
  “lazy”	
  	
  
val	
  info	
  =	
  data.filter(_.contains("INFO"))	
  
info.cache()	
  
	
  
//Acciones	
  =	
  Hasta	
  aquí	
  se	
  ejecutan	
  las	
  	
  
val	
  n1=	
  info.filter(_.contains(“Alice”).count())	
  
Val	
  n2=info.filter(_.contains(“Chuck”).count())	
  
Procesar	
  y	
  poner	
  
en	
  cache	
  
Procesar	
  y	
  poner	
  
en	
  cache	
  
Procesar	
  y	
  poner	
  
en	
  cache	
  
Spark	
  
	
  	
  
Driver	
  
Worker	
  
Worker	
  
Worker	
  
Bloque	
  2	
  
Bloque	
  3	
  
Bloque	
  1	
  
scala>	
  var	
  data	
  =	
  sc.textFile(“sample-­‐syslog.log")	
  
	
  
//Transformación	
  =	
  las	
  transformaciones	
  son	
  “lazy”	
  	
  
val	
  info	
  =	
  data.filter(_.contains("INFO"))	
  
info.cache()	
  
	
  
//Acciones	
  =	
  Hasta	
  aquí	
  se	
  ejecutan	
  las	
  	
  
val	
  n1=	
  info.filter(_.contains(“Alice”).count())	
  
Val	
  n2=info.filter(_.contains(“Chuck”).count())	
  
Se	
  efectúa	
  la	
  acción	
  count	
  y	
  se	
  hace	
  en	
  paralelo.	
  
Adicionalmente	
  por	
  cada	
  worker	
  serán	
  agregados	
  
los	
  resultados	
  y	
  enviados	
  de	
  vuelta	
  al	
  driver.	
  
Spark	
  
WORD	
  COUNT	
  
	
  
scala>	
  val	
  f	
  =	
  sc.textFile("Readme.md")	
  
scala>	
  val	
  wc=f.flatMap(l	
  =>	
  l.split(“	
  ”)).map(word=>(word,1)).reduceByKey(_	
  +	
  _)	
  
scala>	
  wc.saveAsTextFile("salida1")	
  
Spark	
  
•  En	
  procesos	
  ETL	
  es	
  muy	
  común	
  juntar	
  dos	
  
conjuntos	
  de	
  registros	
  
•  Los	
  RDDs	
  pueden	
  juntarse	
  o	
  hacer	
  union.	
  
•  Tener	
  en	
  cuenta	
  los	
  Pairs	
  RDDS	
  que	
  son	
  RDDs	
  
especiales	
  
scala>	
  val	
  format	
  =	
  new	
  java.text.SimpleDateFormat("yyyy-­‐MM-­‐dd")	
  
format:	
  java.text.SimpleDateFormat	
  =	
  java.text.SimpleDateFormat@f67a0200	
  
	
  
scala>	
  case	
  class	
  Register(d:	
  java.u^l.Date,uuid:String,cust_id:String,lat:Float,lng:Float)	
  
defined	
  class	
  Register	
  
	
  
scala>	
  case	
  class	
  Click(d:java.u^l.Date,uuid:String,landing_page:Int)	
  
defined	
  class	
  Click	
  
	
  
scala>	
  val	
  reg	
  =	
  sc.textFile("reg.tsv").map(_.split("t")).map(	
  
	
  	
  	
  	
  	
  |	
  	
  r	
  =>	
  (r(1),	
  Register(format.parse(r(0)),	
  r(1),	
  r(2),	
  r(3).toFloat,	
  r(4).toFloat))	
  
	
  	
  	
  	
  	
  |	
  )	
  
	
  
scala>	
  val	
  clk	
  =	
  sc.textFile("clk.tsv").map(_.split("t")).map(	
  
	
  	
  	
  	
  	
  |	
  	
  c	
  =>	
  (c(1),	
  Click(format.parse(c(0)),	
  c(1),	
  c(2).trim.toInt))	
  
	
  	
  	
  	
  	
  |	
  )	
  
	
  
scala>reg.join(clk).collect()	
  
	
  
	
  
Spark	
  
Spark	
  
•  Enviar	
  aplicaciones	
  
•  Para	
  pruebas	
  el	
  shell	
  es	
  bueno	
  y	
  se	
  puede	
  
reu^lizar	
  mucho	
  código	
  
•  En	
  ambientes	
  de	
  producción	
  las	
  aplicaciones	
  
se	
  envían	
  a	
  través	
  de	
  bin/spark–submit	
  
•  Se	
  debe	
  tener	
  instalado	
  SBT	
  para	
  aplicaciones	
  
en	
  Scala	
  y	
  poder	
  compilar	
  y	
  empaquetar	
  
•  Maven	
  en	
  el	
  caso	
  de	
  Java	
  
Spark	
  
package com.vitatronix!
!
!
import org.apache.spark.SparkContext!
import org.apache.spark.SparkContext._!
import org.apache.spark.SparkConf!
!
object SimpleApp {!
!
!def main(args: Array[String]) {!
!
! !val logfile="/Users/israelgaytan/Documents/Lambda/spark1.3/README.md"!
! !val conf= new SparkConf().setAppName("Spark Stand Alone")!
! !val sc= new SparkContext(conf)!
! !!
! !val input = sc.textFile(logfile)!
!
! !val words = input.flatMap(line => line.split(" "))!
!
! !var counter= words.count()!
!
!
! !val counts = words.map(word=>(word,1)).reduceByKey{case (x,y) => x+y}!
! !//counts.saveAsTextFile("finish.txt")!
!
! !println(s"Finished and counting word $counter")!
!
!
!}!
}!
Spark	
  
	
  
1.-­‐	
  Crear	
  build.sbt	
  
2.-­‐	
  Crear	
  lib,project,src	
  y	
  target	
  
3.-­‐	
  Dentro	
  de	
  src	
  crear	
  main	
  
4-­‐	
  Dentro	
  de	
  main	
  crear	
  java,	
  resources	
  y	
  scala	
  
	
  
	
  
mkdir –p src/{main,test}/{java,resources,scala}!
mkdir lib project target!
	
  
name := "Spark Meetup Wordcount”!
!
version := "1.0”!
!
scalaVersion := "2.10.4”!
!
libraryDependencies ++= Seq(!
"org.apache.spark" %% "spark-core" % "1.3.0" % "provided",!
"org.apache.spark" %% "spark-streaming" % "1.3.0" % "provided"!
)!
	
  
Spark	
  
Crear	
  en	
  la	
  raíz	
  build.sbt	
  
Spark	
  
Ejecutamos	
  sbt	
  para	
  que	
  cree	
  el	
  proyecto	
  
	
  
	
  
MacBook-­‐Pro-­‐de-­‐Israel:scala-­‐wsh	
  israelgaytan$	
  sbt	
  
[info]	
  Loading	
  project	
  defini^on	
  from	
  /Users/israelgaytan/Documents/Lambda/scala-­‐wsh/project/project	
  
[info]	
  Loading	
  project	
  defini^on	
  from	
  /Users/israelgaytan/Documents/Lambda/scala-­‐wsh/project	
  
[info]	
  Set	
  current	
  project	
  to	
  Spark	
  Meetup	
  Wordcount	
  (in	
  build	
  file:/Users/israelgaytan/Documents/Lambda/
scala-­‐wsh/)	
  
	
  
EMPAQUETAMOS	
  
>package	
  
	
  
	
  
	
  
	
  
Spark	
  
Y	
  POR	
  ÚLTIMO	
  ENVIAMOS	
  
!
!
!
bin/spark-submit --class "com.vitatronix.SimpleApp" --master local[*] /
Users/israelgaytan/Documents/Lambda/scala-wsh/target/scala-2.10/spark-
meetup-wordcount_2.10-1.0.jar!
!
Le pasamos en los parámetros en nombre de la clase, el cluster en este caso
–master local[*] tomará todos los cores de la máquina y finalmente el Jar
que empaquetamos con SBT!
Spark	
  
SPARK	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  SERVIDOS	
  CHATOS	
  
Recursos	
  
hGps://databricks.com/spark/developer-­‐resources	
  
Func^onal	
  Programming	
  in	
  Scala	
  –	
  Paul	
  Chiusano	
  Rúnar	
  Bjarnason	
  (Manning)	
  
Learning	
  Spark	
  –	
  Holden	
  Karau	
  	
  (O`Reilly)	
  
Advanced	
  Analy^cs	
  With	
  Spark	
  –	
  Sandy	
  Reza	
  ,	
  Uri	
  Laserson	
  (O`Reilly)	
  
Scala	
  for	
  the	
  Impa^ent	
  –	
  Cay	
  S	
  Horstmann	
  
Scala	
  Cookbook	
  –	
  Alvin	
  Alexander	
  (O`Reilly)	
  
Scala	
  for	
  the	
  intrigued	
  -­‐	
  hGps://www.youtube.com/watch?
v=grvvKURwGNg&list=PLrPC0_h8PkNOtAr4BRTFf46Gwctb6kE9f	
  
 	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  GRACIAS	
  
Apache	
  Spark	
  Meetup	
  
Introducción	
  a	
  Scala	
  
#ApacheSparkMX	
  
•  @isragaytan	
  
•  israel.gaytan@vitatronix.net	
  
•  isragaytan@gmail.com	
  

Más contenido relacionado

La actualidad más candente

Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics con Apache-Flume Elasticsearch HDFS KibanaFelix Rodriguez
 
Instalando Datastax Analytics (Cassandra Y Spark) Con Azure Templates
Instalando Datastax Analytics (Cassandra Y Spark) Con Azure TemplatesInstalando Datastax Analytics (Cassandra Y Spark) Con Azure Templates
Instalando Datastax Analytics (Cassandra Y Spark) Con Azure TemplatesGustavo Arjones
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Juan Astudillo
 
10 11 introducción a r para desarrolladores
10 11 introducción a r para desarrolladores10 11 introducción a r para desarrolladores
10 11 introducción a r para desarrolladoresSoftware Guru
 
JavaScript pilas (Stacks) y colas (Queues) 2
JavaScript pilas (Stacks) y colas (Queues) 2JavaScript pilas (Stacks) y colas (Queues) 2
JavaScript pilas (Stacks) y colas (Queues) 2Juan Astudillo
 
Tema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listasTema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listasR Nuñez
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuarioLaura Folgado Galache
 

La actualidad más candente (9)

Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 
Instalando Datastax Analytics (Cassandra Y Spark) Con Azure Templates
Instalando Datastax Analytics (Cassandra Y Spark) Con Azure TemplatesInstalando Datastax Analytics (Cassandra Y Spark) Con Azure Templates
Instalando Datastax Analytics (Cassandra Y Spark) Con Azure Templates
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
10 11 introducción a r para desarrolladores
10 11 introducción a r para desarrolladores10 11 introducción a r para desarrolladores
10 11 introducción a r para desarrolladores
 
JavaScript pilas (Stacks) y colas (Queues) 2
JavaScript pilas (Stacks) y colas (Queues) 2JavaScript pilas (Stacks) y colas (Queues) 2
JavaScript pilas (Stacks) y colas (Queues) 2
 
Estructuras de datos
Estructuras de datosEstructuras de datos
Estructuras de datos
 
Python Pilas y Colas
Python Pilas y ColasPython Pilas y Colas
Python Pilas y Colas
 
Tema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listasTema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listas
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario
 

Destacado

APIDays - API Design Workshop
APIDays - API Design WorkshopAPIDays - API Design Workshop
APIDays - API Design WorkshopRestlet
 
Workshop: Lambdas y Stream API en Java 8
Workshop: Lambdas y Stream API en Java 8Workshop: Lambdas y Stream API en Java 8
Workshop: Lambdas y Stream API en Java 8superserch
 
⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)
⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)
⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)Victor Asanza
 
Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...
Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...
Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...Brian O'Neill
 
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Baruch Sadogursky
 
Achieve big data analytic platform with lambda architecture on cloud
Achieve big data analytic platform with lambda architecture on cloudAchieve big data analytic platform with lambda architecture on cloud
Achieve big data analytic platform with lambda architecture on cloudScott Miao
 
Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...
Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...
Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...Brian O'Neill
 
Apache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-DataApache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-DataGuido Schmutz
 
Integrate Big Data into Your Organization with Informatica and Perficient
Integrate Big Data into Your Organization with Informatica and PerficientIntegrate Big Data into Your Organization with Informatica and Perficient
Integrate Big Data into Your Organization with Informatica and PerficientPerficient, Inc.
 
Speed layer : Real time views in LAMBDA architecture
Speed layer : Real time views in LAMBDA architecture Speed layer : Real time views in LAMBDA architecture
Speed layer : Real time views in LAMBDA architecture Tin Ho
 
¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?Socialmetrix
 
Lambda architecture on Spark, Kafka for real-time large scale ML
Lambda architecture on Spark, Kafka for real-time large scale MLLambda architecture on Spark, Kafka for real-time large scale ML
Lambda architecture on Spark, Kafka for real-time large scale MLhuguk
 
Real time machine learning
Real time machine learningReal time machine learning
Real time machine learningVinoth Kannan
 
Intro to Apache Spark by CTO of Twingo
Intro to Apache Spark by CTO of TwingoIntro to Apache Spark by CTO of Twingo
Intro to Apache Spark by CTO of TwingoMapR Technologies
 
Visualizing big data in the browser using spark
Visualizing big data in the browser using sparkVisualizing big data in the browser using spark
Visualizing big data in the browser using sparkDatabricks
 

Destacado (20)

Arquitectura Lambda
Arquitectura LambdaArquitectura Lambda
Arquitectura Lambda
 
Elastic map reduce
Elastic map reduceElastic map reduce
Elastic map reduce
 
APIDays - API Design Workshop
APIDays - API Design WorkshopAPIDays - API Design Workshop
APIDays - API Design Workshop
 
Workshop: Lambdas y Stream API en Java 8
Workshop: Lambdas y Stream API en Java 8Workshop: Lambdas y Stream API en Java 8
Workshop: Lambdas y Stream API en Java 8
 
Spark
SparkSpark
Spark
 
Big data philly_jug
Big data philly_jugBig data philly_jug
Big data philly_jug
 
Google mesa
Google mesaGoogle mesa
Google mesa
 
⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)
⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)
⭐⭐⭐⭐⭐ Examen Sistemas Digitales SD+MSA (2do Parcial)
 
Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...
Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...
Data Pipelines & Integrating Real-time Web Services w/ Storm : Improving on t...
 
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
 
Achieve big data analytic platform with lambda architecture on cloud
Achieve big data analytic platform with lambda architecture on cloudAchieve big data analytic platform with lambda architecture on cloud
Achieve big data analytic platform with lambda architecture on cloud
 
Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...
Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...
Re-envisioning the Lambda Architecture : Web Services & Real-time Analytics ...
 
Apache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-DataApache Cassandra for Timeseries- and Graph-Data
Apache Cassandra for Timeseries- and Graph-Data
 
Integrate Big Data into Your Organization with Informatica and Perficient
Integrate Big Data into Your Organization with Informatica and PerficientIntegrate Big Data into Your Organization with Informatica and Perficient
Integrate Big Data into Your Organization with Informatica and Perficient
 
Speed layer : Real time views in LAMBDA architecture
Speed layer : Real time views in LAMBDA architecture Speed layer : Real time views in LAMBDA architecture
Speed layer : Real time views in LAMBDA architecture
 
¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?¿Por que cambiar de Apache Hadoop a Apache Spark?
¿Por que cambiar de Apache Hadoop a Apache Spark?
 
Lambda architecture on Spark, Kafka for real-time large scale ML
Lambda architecture on Spark, Kafka for real-time large scale MLLambda architecture on Spark, Kafka for real-time large scale ML
Lambda architecture on Spark, Kafka for real-time large scale ML
 
Real time machine learning
Real time machine learningReal time machine learning
Real time machine learning
 
Intro to Apache Spark by CTO of Twingo
Intro to Apache Spark by CTO of TwingoIntro to Apache Spark by CTO of Twingo
Intro to Apache Spark by CTO of Twingo
 
Visualizing big data in the browser using spark
Visualizing big data in the browser using sparkVisualizing big data in the browser using spark
Visualizing big data in the browser using spark
 

Similar a Apache spark meetup

Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas característicasFernando Petrola
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolJean-Paul Calbimonte
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Ricardo Tesoriero
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)numpad
 
Matlab
MatlabMatlab
Matlabford81
 
Análisis de datos con Apache Spark
Análisis de datos con Apache SparkAnálisis de datos con Apache Spark
Análisis de datos con Apache SparkEduardo Castro
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)Oliver Centeno
 
[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracionEudris Cabrera
 
Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)Iran Reyes Fleitas
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfcursosrams
 

Similar a Apache spark meetup (20)

Java 8
Java 8Java 8
Java 8
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
 
Perl1 escalares
Perl1 escalaresPerl1 escalares
Perl1 escalares
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) Catecbol
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)
 
Tutorial descilab
Tutorial descilabTutorial descilab
Tutorial descilab
 
Meetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scalaMeetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scala
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)
 
Matlab
MatlabMatlab
Matlab
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
 
Análisis de datos con Apache Spark
Análisis de datos con Apache SparkAnálisis de datos con Apache Spark
Análisis de datos con Apache Spark
 
04 j flex
04 j flex04 j flex
04 j flex
 
Pf con scala
Pf con scalaPf con scala
Pf con scala
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion
 
Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
Ruby
Ruby Ruby
Ruby
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 

Último

Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 

Último (20)

Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 

Apache spark meetup

  • 1. Apache  Spark  Meetup   Introducción  a  Scala   #ApacheSparkMX   @isragaytan   israel.gaytan@vitatronix.net   isragaytan@gmail.com  
  • 2. Hands  –  On     •  Instalación  en  su  sistema   •  Introducción  a  Scala   •  Ejercicios  con  Scala   •  Break   •  Introducción  a  Apache  Spark   •  Ejemplo  de  Scala  con  Apache  Spark   •  Preguntas  y  Respuestas  
  • 4. Instalación  en  su  sistema   •  Descargar  de  ser  posible  en     hGps://spark.apache.org/downloads.html     •  Descargar  la  versión  1.3.1  prebuilt  para   Hadoop  2.6   •  Crear  una  carpeta  en  su  sistema  spark1.3   •  Descomprimir  la  carpeta  y  renombrarla  a   spark1.3  
  • 5. Probando  instalación   •  Dirigirse  a  su  carpeta  de  instalación  de  spark1.3   •  Ejecutar  bin/spark-­‐shell   •  Se  abrirá  el  shell  de  Apache  Spark  con  Scala    scala  >       Nota:  Scala  es  completamente  descargable  de   hGp://www.scala-­‐lang.org/download/all.html  
  • 6. Introducción  a  Scala   •  Scala  es  un  lenguaje  orientado  a  objetos  (OOP)  y   de  programación  funcional  (FP)   •  Compila  a  archivos  class  que  empaquetamos   como  JAR  (Java  Archive)  (Maven  o  SBT)   •  Corre  sobre  la    Java  Virtual  Machine   •  Creado  por  Mar^n  Odersky   •  Cada  variable  es  un  objeto  y  cada  operador  es  un   método   •  hGp://scala-­‐lang.org  
  • 7. •  Como  corre  sobre  la  JVM  nos  permite  usar  las   librerías  de  Java   •  SCALA  CAMBIARÁ  LA  MANERA  EN  QUE   PIENSAS  COMO  PROGRAMAR   •  Permite  escribir  código  de  manera  concisa   •  No  te  desesperes  si  no  en^endes  al  principio       Introducción  a  Scala  
  • 8. Cadenas   •  Abre  tu  prompt  de  Apache  Spark    (spark1.3)        bin/spark-­‐shell     scala  >  “Hola  Mundo”   res0:  String  =  Hola  Mundo     scala>  "Hola  scala".getClass.getName   res2:  String  =  java.lang.String      
  • 9. Cadenas     scala>  val  s  =  "Hola  Scala  Meetup"   s:  String  =  Hola  Scala  Meetup     scala>  s.length   res4:  Int  =  17     scala>  s.foreach(println)   H   o   l  
  • 10. Cadenas   •  Podemos  u^lizar  métodos  funcionales  como   filter  ej:   scala>  var  result  =  s.filter(_  !=  'l')   result:  String  =  Hoa  Scaa  Meetup   Ver  (StringOps,  StringLike,  WrappedString)  
  • 11. Cadenas   scala>  s1.drop(4).take(2).capitalize   res6:  String  =  Up     scala>  val  s3  =  "hola"   s3:  String  =  hola     scala>  s3  ==  "hola"   res8:  Boolean  =  true      
  • 12. Cadenas   scala>  val  mensaje  =  "Apache  Spark  Meetup".map(c  =>c.toUpper)   mensaje:  String  =  APACHE  SPARK  MEETUP     Pero  también  podemos  usar  el  carácter  mágico  _  para  que  nuestro  código  se   vea  mucho  más  limpio     scala>  val  mensaje2  =  "Apache  Spark  Meetup".map(_.toUpper)   mensaje2:  String  =  APACHE  SPARK  MEETUP     A  el  método  map  se  le  pasan  funciones  (programación  funcional)          
  • 13. Cadenas   •  Ver  como  funcionan  las  expresiones  regulares   scala>  val  address  =  "Dr  Levante  1234  Edif  302  ".replaceAll("[0-­‐9]","x")   address:  String  =  "Dr  Levante  xxxx  Edif  xxx  ”      
  • 14. Clases  implicitas   •  Las  clases  implícitas  deben  ser  definidas  en  un   ámbito  donde  las  definiciones  de  método  son   permi^das  (Scala  2.10)     •  Permiten  agregar  nuestros  propios  métodos  a   objetos  sin  tener  que  extenderlos        
  • 15. Clases  Implícitas   package  com.meetup.u^ls     object  U^lidades{      implicit  class  IncrementarCaracter(val  s:String){    def  incrementar  =  s.map(c  =>  (c  +1).toChar)   }   }     package  foo.bar     import  com.meetup.u^ls.U^lidades._     object  Main  extends  App{   println(“ABC”.incrementar)   }    
  • 16. Números   Char  -­‐16  bit  unsigned   Byte  -­‐  8  Bit  signed  value   Short  –  16  bit  signed  value   Int  –  32  bit  signed  value     Long  -­‐  64  bit  signed  value   Float  –  32  bit  IEEE  754  single  precision  float   Double  –  64  bit  IEEE  754  single  precision  float  
  • 17. Números   “100”.toInt    -­‐  Usar  métodos  to  para  cas^ng   “100”.toFloat  ….     Scala  no  ^ene  operadores  ++    ni  –   val  es  inmutable   Scala  >  var  a  =  1      
  • 18. Números   scala>  val  a  =  1   a:  Int  =  1     scala>  a  +=  1   <console>:22:  error:  value  +=  is  not  a  member  of  Int                              a  +=  1                                  ^     scala>  var  b  =  1   b:  Int  =  1     scala>  b+=1     scala>  b   res11:  Int  =  2  
  • 19.  val  r  =  scala.u^l.Random   r.nextInt     Podemos  limitar  la  generación     r.nextInt(100)   Números  
  • 20. val  r  =  1  to  100     val  j  =  1  to  100  by  2     val  x  =  (1  to  10).toList     val  z  =  (1  to  100).toArray   Números  
  • 21. Estructuras  de  Control   •  If/then/else  es  similar  a  Java   •  Pueden  regresar  un  resultado     val  x  =  if(a)  y  else  b     scala>  val  x  =  if("a"=="a")  9  else  7   x:  Int  =  9      
  • 22. •  for  y  foreach   •  Nos  sirven  para  hacer  ciclos  y  sobre  todo  iterar   en  colecciones  (List,  Array,  Range)   scala>  val  samp  =  List("isra","memo","paco")   samp:  List[String]  =  List(isra,  memo,  paco)     scala>  for(n  <-­‐  samp)  yield  n.capitalize   res20:  List[String]  =  List(Isra,  Memo,  Paco)     Estructuras  de  Control  
  • 23. scala>  samp.foreach(println)   isra   memo   Paco   •  Si  se  requiere  más  lineas     samp.foreach{  e=>            |  val  nuevo  =  e.toUpperCase            |  println(nuevo)            |  }       Estructuras  de  Control  
  • 24. Estructuras  de  Control   •  Es  muy  importante  saber  como  los  ciclos  son   trasladados  por  el  compilador   •  for  loop  que  itera  sobre  una  colección  se   transforma  en  foreach   •  for  loop  con  un  guard  se  traslada  a  una   secuencia  de  withFilter  seguida  de  un  foreach   •  for  loop  con  un  yield  se  traslada  a  un  map  e  la   colección  
  • 25. Estructuras  de  Control   scala>  val  i  =  5   i:  Int  =  5     scala>  val  month    =  i  match{            |  case  1  =>  "enero"            |  case  2  =>  "febrero"            |  case  3  =>  "marzo"            |  case  4  =>  "Abril"            |  case  5  =>  "Mayo”            |  case  _  =>    “Mes  inválido”              |  }   month:  String  =  Mayo  
  • 26. Métodos   •  Los  métodos  los  definimos  como  def     scala>  def  square(x:Int):  Int  =  x  *  x   square:  (x:  Int)Int   scala>  square(5)   res33:  Int  =  25    
  • 27. Colecciones   •  Las  colecciones  en  escala  son  amplias  y  debemos   aprender  a  u^lizarlas  dependiendo  el  contexto  de   nuestro  requerimiento   •  List,  Array,  Map  y  Set   •  Métodos  como  filter,  foreach,  map  y  reduceLe„   aplican  a  las  colecciones  ^enen  loops  dentro  de   sus  algoritmos     •  El  predicado  es  un  método  o  función  anónima   que  toma  uno  o  más  parámetros  y  regresa  un   valor  booleano  
  • 28. Colecciones   Ej:   (i:int)  =>  i  %  2  ==  0              //función  anónima     _  %  2  ==  0                                           val  list  =  List.range(1,20)   val  events  =  list.filter(_  %  2  ==  0)      
  • 29. Colecciones   Traversable   Iterable   Seq   IndexedSeq   LinearSeq   Set   Map  
  • 30. Colecciones     Sequence  :  es  una  colección  lineal  de  elementos   que  serán  indexados     Map:  Con^ene  una  colección  key/value  como  un   Java  Map,  Ruby  Hash  o  un  diccionario  en  Python     Set  :es  una  colección  que  con^ene  elementos  sin   duplicar    
  • 31. Colecciones   •  Escoger  un  Sequence..¿La  secuencia  debe  ser   indexada  o  implementada  como  una  linked  list?   •  ¿Queremos  una  colección  mutable  o  inmutable?   •  Imutables:List,  Queue,  Range,Stack,  Stream,   String,  Vector   •  Mutables:Array,  ArrayBuffer,ArrayStack,   LinkedList,ListBuffer,  MutableLIst,  Queue,  Stack,   StringBuilder  
  • 32. Colecciones   •  Escoger  Map  es  más  sencillo   •  Puedo  escoger  un  SortedMap  que  almacenará   elementos  ordenados  por  llave   •  LinkedHashMap  para  almacenar  elementos  en   orden  de  inserción   •  HashMap,LinkedHashMap,ListMap,Map,Sorte dMap,TreeMap,WeakHashMap  
  • 33. Colecciones   •  Escoger  un  set  es  similar  a  un  map   •  Existen  clases  mutables  e  inmutables   •  BitSet,HashSet,LinkedHashSet,ListSet,TreeSet, Set,SortedSet   •  Algunas  otras  colecciones   (Enumera^on,Iterator,Op^on,Tuple)  
  • 34. Colecciones   Un  método  de  transformación  es  un  método  que   construye  una  colección  a  par^r  de  una  existente.   Esta  incluye  métodos  como  map,  filter,  reverse  etc.   Existen  colecciones  strict  y  lazy.   Strict  aloja  los  elementos  inmediatamente  en   memoria   Lazy  no  aloja  los  elementos  inmediatamente  y  las   transformaciones  no  construyen  nuevos  elementos   hasta  que  se  ejecutan.    
  • 35. Colecciones   •  Métodos  de  filtrado:   collect,diff,dis^nct,drop,dropWhile,filter,filterNot,find,foldLe„,fo ldRight,head,headOp^on.   •  Métodos  de  transformación:   diff,dis^nct,collect,flatMap,map,reverse,sortWith,takeWhile,zip,   zipWithIndex   •  Métodos  de  agrupación:   groupBy,par^^on,sliding,span,splitAt,unzip   •  Métodos  matemá^cos  y  de  información:   contains,containsSlice,count,endWith,exist,find,forAll,indexOf… max,min,product,size,sum.  
  • 36. Colecciones   scala>  days.zipWithIndex.foreach{            |  case(day,count)  =>  println(s"$count  es  $day")            |  }   0  es  Lunes   1  es  Martes   2  es  Miércoles   3  es  Jueves   4  es  Viernes  
  • 37. Colecciones   scala>  val  frutas  =   List("pera","manzana","plátano","mango","uva")   frutas:  List[String]  =  List(pera,  manzana,  plátano,   mango,  uva)     scala>  frutas.filter(_.length  <  6).map(_.toUpperCase)   res28:  List[String]  =  List(PERA,  MANGO,  UVA)  
  • 38. scala>  val  listas=List(List(1,2),List(3,4))   listas:  List[List[Int]]  =  List(List(1,  2),  List(3,  4))     scala>  val  resultado  =  listas.flaGen   resultado:  List[Int]  =  List(1,  2,  3,  4)   Colecciones  
  • 39. scala>  def  toInt(in:String):Op^on[Int]={            |  try{            |  Some(Integer.parseInt(in.trim))            |  }            |  catch{            |  case  e:Excep^on  =>  None            |  }            |  }   toInt:  (in:  String)Op^on[Int]     scala>  fms.flatMap(toInt)   res32:  List[Int]  =  List(1,  2,  5)   Colecciones  
  • 40. Colecciones   Ejercicios:   -­‐  Filtrar  los  mayores  a  4   -­‐  Filtrar  los  mayores  a  5   -­‐  Sumar  los  elementos  de  la  colección   Mayor  información  :   hGp://www.scala-­‐lang.org/api/2.10.4/ index.html#scala.collec^on.Seq  
  • 41. Programación  Funcional   •  Se  construyen  programas  usando  funciones  puras   •  Las  funciones  no  ^enen  efectos  colaterales   •  Modificar  una  variable,  una  estructura,   establecer  un  campo  en  un  objeto,  arrojar  una   excepción,  imprimir  en  la  consola,  leer  o  escribir   un  archivo,  dibujar  en  pantalla   •  Programación  funcional  es  una  restricción  en   COMO  escribimos  programas  pero  no  en  lo  QUE   nuestros  programas  pueden  expresar.  
  • 43.
  • 44.
  • 45. Spark  101  (Historia)   Ecosistema  Big  Data            
  • 46. Spark  101   •  Map  reduce  es  el  modelo  de  programación  y   el  corazón  de  Hadoop   •  Toma  datos  de  manera  masiva  y  los  divide  a   través  de  un  número  de  nodos  en  un  clúster   •  Tiene  dos  fases  la  fase  Map  y  la  fase  Reduce   •  Se  programa  en  Java  y  se  envía  de  manera   distribuida  al  clúster  (también  se  puede  en   Python,  R,  .NET  a  través  de  Hadoop   Streaming)  
  • 47. Spark  101  (WordCount)   Mapper   Reducer  
  • 49. Spark  101   •  Es  di‹cil  programar  en  Map  Reduce   •  Cuellos  de  botellas  de  performance   •  Existen  abstracciones  como  Hive  y  Pig   •  Aún  así  es  complicado  desarrollar  
  • 50. Spark   •  Spark  es  un  motor  de  cómputo  DISTRIBUIDO   •  Op^mizado  para  velocidad,  fácil  uso  e  implementación  de  análisis   sofis^cado.   •  Es  un  proyecto  open  source  de  APACHE   •  APIS  en  Python,  Java  y  Scala    …R  en  Spark  1.4!   •  Lo  u^lizamos  para  tareas  de  ciencia  en  datos   •  Lo  u^lizamos  para  aplicaciones  de  procesamiento  a  gran  escala   (terabytes  o  petabytes  de  datos  =  BIG  DATA)  
  • 52.  Resilient  Distributed  Datasets  (RDDs)   -­‐Abstracción  de  programación  de  SPARK   -­‐Se  desarrollan  programas  en  términos  de   transformaciones    y  acciones  (Dataflows)   -­‐Colección  de  objetos  que  pueden  ser  almacenados  en   memoria  o  en  disco  a  través  de  un  clúster   -­‐Estan  desarrollados  para  transformaciones  en  paralelo   (map,  filter,  etc)   -­‐  Los  RDDs  pueden  ser  almacenados  en  memoría,  en   disco  u  ambos.   -­‐Tolerancia  a  fallos   Spark  
  • 53. //Spark  context  sc  variable  especial  de  contexto   //RDD  Base   scala>  var  data  =  sc.textFile(“sample-­‐syslog.log")     //Transformación  =  las  transformaciones  son  “lazy”     val  info  =  data.filter(_.contains("INFO"))   info.cache()     //Acciones  =  Hasta  aquí  se  ejecutan  las     val  n1=  info.filter(_.contains(“Alice”).count())   Val  n2=info.filter(_.contains(“Chuck”).count())     Spark  
  • 54. Spark   •  Formatos:   Archivos  de  texto,  JSON,CSV,TSV,SequenceFiles,   ObjectFiles,Formatos  de  entrada/salida  de   Hadoop     Amazon  S3,HDFS,Avro,Parquet,Cassandra,   Hbase,Mongo,Elas^cSearch  etc.  
  • 55. •  Spark  traza  una  grafo  lineal  de   transformaciones  y  acciones   •  El  driver  se  encarga  de  enviar  nuestra   aplicación  a  todos  los  nodos  con  este  grafo   •  Se  enviaran  instrucciones  a  los  workers  para   ser  ejecutadas  (archivos  de  texto,  hdfs  etc)   •  Cada  worker  leerá  los  datos  y  hará   transformaciones  y  hará  cache  de  los  datos   Spark  tras  bambalinas  
  • 56. Spark   •  RDDS  ^enen  dos  ^pos  de  operaciones   •  TRANSFORMACIONES:  Las  transformaciones   siempre  me  regresarán  un  nuevo  RDD  y  no   son  procesadas  inmediatamente     •  ACCIONES:Las  acciones  siempre  me   devolverán  un  resultado  (se  regresan  al  driver)  
  • 57. Spark  Clúster   Spark   Driver   Worker   Worker   Worker   Bloque  1   Bloque  2   Bloque  3   El  driver  se  encarga  de  enviar  nuestra   aplicación  a  todos  los  nodos  (workers)  
  • 58.     Driver   Worker   Worker   Worker   Bloque  2   Bloque  3   Spark   Bloque  1   Cache  1   Cache  2   Cache  3   Una  vez  que  los  procesa  los  pone  en   cache  por  cada  worker   scala>  var  data  =  sc.textFile(“sample-­‐syslog.log")     //Transformación  =  las  transformaciones  son  “lazy”     val  info  =  data.filter(_.contains("INFO"))   info.cache()     //Acciones  =  Hasta  aquí  se  ejecutan  las     val  n1=  info.filter(_.contains(“Alice”).count())   Val  n2=info.filter(_.contains(“Chuck”).count())   Procesar  y  poner   en  cache   Procesar  y  poner   en  cache   Procesar  y  poner   en  cache  
  • 59. Spark       Driver   Worker   Worker   Worker   Bloque  2   Bloque  3   Bloque  1   scala>  var  data  =  sc.textFile(“sample-­‐syslog.log")     //Transformación  =  las  transformaciones  son  “lazy”     val  info  =  data.filter(_.contains("INFO"))   info.cache()     //Acciones  =  Hasta  aquí  se  ejecutan  las     val  n1=  info.filter(_.contains(“Alice”).count())   Val  n2=info.filter(_.contains(“Chuck”).count())   Se  efectúa  la  acción  count  y  se  hace  en  paralelo.   Adicionalmente  por  cada  worker  serán  agregados   los  resultados  y  enviados  de  vuelta  al  driver.  
  • 60. Spark   WORD  COUNT     scala>  val  f  =  sc.textFile("Readme.md")   scala>  val  wc=f.flatMap(l  =>  l.split(“  ”)).map(word=>(word,1)).reduceByKey(_  +  _)   scala>  wc.saveAsTextFile("salida1")  
  • 61. Spark   •  En  procesos  ETL  es  muy  común  juntar  dos   conjuntos  de  registros   •  Los  RDDs  pueden  juntarse  o  hacer  union.   •  Tener  en  cuenta  los  Pairs  RDDS  que  son  RDDs   especiales  
  • 62. scala>  val  format  =  new  java.text.SimpleDateFormat("yyyy-­‐MM-­‐dd")   format:  java.text.SimpleDateFormat  =  java.text.SimpleDateFormat@f67a0200     scala>  case  class  Register(d:  java.u^l.Date,uuid:String,cust_id:String,lat:Float,lng:Float)   defined  class  Register     scala>  case  class  Click(d:java.u^l.Date,uuid:String,landing_page:Int)   defined  class  Click     scala>  val  reg  =  sc.textFile("reg.tsv").map(_.split("t")).map(            |    r  =>  (r(1),  Register(format.parse(r(0)),  r(1),  r(2),  r(3).toFloat,  r(4).toFloat))            |  )     scala>  val  clk  =  sc.textFile("clk.tsv").map(_.split("t")).map(            |    c  =>  (c(1),  Click(format.parse(c(0)),  c(1),  c(2).trim.toInt))            |  )     scala>reg.join(clk).collect()       Spark  
  • 63. Spark   •  Enviar  aplicaciones   •  Para  pruebas  el  shell  es  bueno  y  se  puede   reu^lizar  mucho  código   •  En  ambientes  de  producción  las  aplicaciones   se  envían  a  través  de  bin/spark–submit   •  Se  debe  tener  instalado  SBT  para  aplicaciones   en  Scala  y  poder  compilar  y  empaquetar   •  Maven  en  el  caso  de  Java  
  • 64. Spark   package com.vitatronix! ! ! import org.apache.spark.SparkContext! import org.apache.spark.SparkContext._! import org.apache.spark.SparkConf! ! object SimpleApp {! ! !def main(args: Array[String]) {! ! ! !val logfile="/Users/israelgaytan/Documents/Lambda/spark1.3/README.md"! ! !val conf= new SparkConf().setAppName("Spark Stand Alone")! ! !val sc= new SparkContext(conf)! ! !! ! !val input = sc.textFile(logfile)! ! ! !val words = input.flatMap(line => line.split(" "))! ! ! !var counter= words.count()! ! ! ! !val counts = words.map(word=>(word,1)).reduceByKey{case (x,y) => x+y}! ! !//counts.saveAsTextFile("finish.txt")! ! ! !println(s"Finished and counting word $counter")! ! ! !}! }!
  • 65. Spark     1.-­‐  Crear  build.sbt   2.-­‐  Crear  lib,project,src  y  target   3.-­‐  Dentro  de  src  crear  main   4-­‐  Dentro  de  main  crear  java,  resources  y  scala       mkdir –p src/{main,test}/{java,resources,scala}! mkdir lib project target!  
  • 66. name := "Spark Meetup Wordcount”! ! version := "1.0”! ! scalaVersion := "2.10.4”! ! libraryDependencies ++= Seq(! "org.apache.spark" %% "spark-core" % "1.3.0" % "provided",! "org.apache.spark" %% "spark-streaming" % "1.3.0" % "provided"! )!   Spark   Crear  en  la  raíz  build.sbt  
  • 67. Spark   Ejecutamos  sbt  para  que  cree  el  proyecto       MacBook-­‐Pro-­‐de-­‐Israel:scala-­‐wsh  israelgaytan$  sbt   [info]  Loading  project  defini^on  from  /Users/israelgaytan/Documents/Lambda/scala-­‐wsh/project/project   [info]  Loading  project  defini^on  from  /Users/israelgaytan/Documents/Lambda/scala-­‐wsh/project   [info]  Set  current  project  to  Spark  Meetup  Wordcount  (in  build  file:/Users/israelgaytan/Documents/Lambda/ scala-­‐wsh/)     EMPAQUETAMOS   >package          
  • 69. Y  POR  ÚLTIMO  ENVIAMOS   ! ! ! bin/spark-submit --class "com.vitatronix.SimpleApp" --master local[*] / Users/israelgaytan/Documents/Lambda/scala-wsh/target/scala-2.10/spark- meetup-wordcount_2.10-1.0.jar! ! Le pasamos en los parámetros en nombre de la clase, el cluster en este caso –master local[*] tomará todos los cores de la máquina y finalmente el Jar que empaquetamos con SBT! Spark  
  • 70. SPARK                                                          SERVIDOS  CHATOS  
  • 71. Recursos   hGps://databricks.com/spark/developer-­‐resources   Func^onal  Programming  in  Scala  –  Paul  Chiusano  Rúnar  Bjarnason  (Manning)   Learning  Spark  –  Holden  Karau    (O`Reilly)   Advanced  Analy^cs  With  Spark  –  Sandy  Reza  ,  Uri  Laserson  (O`Reilly)   Scala  for  the  Impa^ent  –  Cay  S  Horstmann   Scala  Cookbook  –  Alvin  Alexander  (O`Reilly)   Scala  for  the  intrigued  -­‐  hGps://www.youtube.com/watch? v=grvvKURwGNg&list=PLrPC0_h8PkNOtAr4BRTFf46Gwctb6kE9f  
  • 72.                                                                  GRACIAS   Apache  Spark  Meetup   Introducción  a  Scala   #ApacheSparkMX   •  @isragaytan   •  israel.gaytan@vitatronix.net   •  isragaytan@gmail.com