Full text
Gene ado es ScalaCheck
pa a p ope y-based es ing
de p og amas Spa k y Spa k
S eaming
T abajo in de g ado del G ado en Ingenie ía
In o má ica
Uni e sidad Complu ense de Mad id
Año 2015 - 2016
AUTOR
Max A nul o Tello O iz
DIRECTORES
Ad ián Riesco Rod iguez
Juan Rod íguez Ho alá
1
2
3
DEDICATION
To my pa en s, o he incessan suppo and hei in aluable eachings.
4
Au o ización de di usión y u ilización
Yo, Max A nul o Tello O iz, au o izo a la Uni e sidad Complu ense de Mad id a di undi
y u iliza con ines académicos, no come ciales y mencionando exp esamen e a su
au o , an o la p esen e memo ia, el código y/o los con enidos ex as desa ollados
du an e la ealización de es e p oyec o.
Fdo.
Max A nul o
Tello O iz
5
6
Resumen
En los úl imos años hemos sido es igos de la expansión del pa adigma big da a a una
elocidad e iginosa. Los cambios en es e campo, nos pe mi en amplia las á eas a
a a ; lo que a su ez implica una mayo complejidad de los sis emas so wa e
asociados a es as a eas, como sucede en sis emas de moni o ización o en el In e ne
de las Cosas (In e ne o Things). Asimismo, la necesidad de implemen a p og amas
cada ez obus os y e icien es, es deci , que pe mi an el cómpu o de da os a mayo
elocidad y de los se ob engan in o mación ele an e, aho ando cos es y iempo, ha
p opiciado la necesidad cada ez mayo de he amien as que pe mi an e alua es os
p og amas.
En es e con ex o, el p esen e p oyec o se cen a en ex ende la he amien a sscheck.
Sscheck pe mi e la gene ación de casos de p ueba basados en p opiedades de
p og amas esc i os en Spa k y Spa k S eaming. Es os lenguajes o man pa e de un
mismo ma co de código abie o pa a la compu ación dis ibuida en clús e . Dado que
las p uebas basadas en p opiedades gene an da os alea o ios, es di ícil ep oduci los
p oblemas encon ados en una cie a sesion; po ello, la ex ensión se cen a á en
ca ga y gua da casos de es en disco median e el mues eo de da os desde
colecciones mayo es.
Palab as cla e
Spa k, es eo basado en p opiedades, Scala, gene ado es, ScalaCheck, big da a.
7
Abs ac
In ecen yea s, we ha e been wi ness o he speedy expansion o big da a. The
changes in his ield ha e led us o expand he ea able a eas; which also implies mo e
complex so wa e sys ems associa ed o hese asks, as i happens in moni o ing
sys ems o in he In e ne o Things. Likewise, he necessi y o implemen ing eliable
and e icien p og ams, ha is, ones ha allows us o compu e da a in a as e pace and
o ex ac aluable in o ma ion, sa ing money and ime, has led o he inc easing need
o ools ha pe mi us e alua e hese p og ams.
In his con ex , he p esen p ojec cen es i s mission in ex end he sscheck ool.
Sscheck is able o gene a e es cases based in p ope ies o p og ams w o e in Spa k
and Spa k S eaming. These languages a e pa o he same open sou ce clus e
compu ing amewo k. Since he p ope y-based es s gene a e andom da a, i ’s
complica ed o ep oduce he p oblems ound in a gi en session; he e o e, he
ex ension will cen e in loading and sa ing es cases om disk h ough he sampling o
da a om bigge collec ions.
Keywo ds
Spa k, p ope y-based es ing, Scala, gene a o s, ScalaCheck, big da a.
8
15
Pa a el p ime alo elige un alo alea o io en e 1 y 50, el segundo elemen o
depende di ec amen e del p ime o: se á un alo en e dicho elemen o y su
doble.
Imagen 2.2. Gene ado ScalaCheck.
En el siguien e ejemplo se in en a explica el esul ado de combina
p opiedades y gene ado es ScalaCheck de o ma que pe mi a hace se una idea
del po encial de es a he amien a. En es e ejemplo de inimos una p opiedad
que, dados dos gene ado es que de uel en un alo en e o posi i o cada uno,
pa a odo alo x e y, la suma de ambos se á siemp e mayo que el p ime y
que el segundo indi idualmen e ( e imagen 2.3).
Imagen 2.3. P opiedad con dos gene ado es.
Especi icada la p opiedad pudie a pa ece a p ime is a que es a se cumple
pa a cualquie caso, sin emba go al ejecu a la ( e imagen 2.4), Scalacheck
encuen a un con aejemplo ápidamen e, en es e caso en el p ime in en o, aún
más in e esan e, nos mues a el pa de alo es más sencillos pa a el cual la
p opiedad es e u ada. Es o se debe a una implemen ación in e na llamada
Sh inking la cual una ez e u ada la p opiedad minimiza au omá icamen e el
con aejemplo has a encon a una en ada más sencilla pa a el cual la
p opiedad sigue sin cumpli se.
16
Imagen 2.4. Ejecución de la p opiedad ScalaCheck.
Bajo es a p emisa, los p o eso es Ad ián Riesco y Juan Rod íguez al
in oluc a se con ecnologías big da a se die on cuen a que los p og amas que
desa ollaban e an muchas eces bas an e complicados de es ea y el esc ibi
es de unidades suponía un excesi o empleo de iempo y ecu sos. Po dicha
azón su ge sscheck [7,8] una he amien a que ex iende ScalaCheck y es á
esc i a en Scala pa a el es eo de p og amas basado en Spa k y Spa k
S eaming.
Es a biblio eca pe mi e usa una a ian e de la lógica lineal empo al pa a
especi ica p opiedades que pueden se e aluadas po ScalaCheck. En dichas
p opiedades se busca pone a p ueba sis emas de p ocesamien o de lujo de
da os y encon a posibles b echas que ulne en la in eg idad de es os
p og amas.
Po ejemplo, pa a el caso desc i o en la imagen 2.5 en el que se especi ica una
ó mula pa a Spa k S eaming, pa a 20 lo es de da os, que ecibe un lujo de
uplas [núme o, Booleano], donde los núme os son iden i icado es de usua io y
el Booleano indica si se puede con ia en esa pe sona. Que emos que la
unción cuando encuen e a alguien en quien no se puede con ia , gua de a ese
alguien en una lis a, po si le emos en el u u o no con ia en el. La ó mula
indica que has a que no se encuen a a nadie sospechoso nos iamos de odos
y, una ez descon iamos de alguien, descon iamos de él pa a siemp e (pa a
más in o mación en ó mulas empo ales e e e encia 9).
Sin emba go, el hecho de gene a casos de es alea o iamen e es an o una
en aja como un p oblema en el TBP. Si nos opamos con un con aejemplo
que e u a una p opiedad nos en en amos a una si uación que plan ea dos
p oblemas: el p ime o es que hemos llegado a un con aejemplo al aza , po lo
que si ol iésemos a es ea la unción, al ez no da íamos con el mismo e o
y nues o es end ía un esul ado a o able, encon ándonos con un also
posi i o; la segunda es que es á asociada a la p ime a: un con aejemplo es un
caso alioso de es (pod ía incluso conside a se su inclusión como es de
unidad) y en es e ma co lo es amos pe diendo.
17
Imagen 2.5. Ejemplo de ó mula pa a lujos con inuos en Spa k S eaming.
La mo i ación es, pues, encon a una solución al p oblema de no pode
ep oduci las si uaciones que ocasionan allos, desde un ace camien o que nos
pe mi a gua da los con aejemplos que se encuen en. Si podemos almacena
es os con aejemplos pod emos eu iliza los en el u u o. De o ma que nos
pe mi an hace cambios en el p og ama y cons a a si una ez a eglados,
siguen allando.
2.2. Obje i os y jus i icación
El obje i o de es e p oyec o es el de complemen a la he amien a sscheck
ampliando su uncionalidad, de al o ma que nos pe mi a especi ica
gene ado es ScalaCheck a pa i de schemas Spa kSQL y schemas Apache
A o pa a un de e minado lujo de da os, gua dando y ol iendo a usa los
con aejemplos encon ados pa a pos e io men e eu iliza los y e i ica si el
p og ama se ha co egido adecuadamen e.
Pa a ellos plan eamos una se ie de hi os que, p ime o, pe mi an amilia iza nos
con las ecnologías aquí u ilizadas, ya que en muchos casos algunas ienen
pocos años de ida, la documen ación exis en e es ela i amen e escasa y no
18
se ocan en ninguna asigna u a de la ca e a. Lo que supond á como e emos
más adelan e, un e o añadido al desa ollo de la he amien a. Segundo, una
ez asen ados los conocimien os, plan ea una si uación en la que podamos
desa olla gene ado es incisi os, los cuales nos pe mi en especi ica una
p opiedad, un gene ado Scalacheck y un colección de da os. Ejecu a los en un
es e aluando la colección y se capaces de gua da los con aejemplos
encon ados en un iche o.
La ex ensión de la he amien a supond á que una ez inalizados los es s la
in o mación pe sis a, podamos co egi posibles e o es en los p og amas
e aluados y nos pe mi a simula nue os es s con los con aejemplos
encon ados. Si es os esul an sa is ac o ios supond á que hemos podido
co egi ealmen e dichos p og amas.
2.3. Plan de abajo
El p oyec o se lle ó a cabo en e los meses de oc ub e de 2015 y junio de 2016,
bajo la u ela de los p o eso es Ad ián Riesco y Juan Rod íguez Ho alá. Se
man u o el con ac o du an e el cu so egula men e median e co eo elec ónico
y euniones en su despacho, al p incipio con mucha meno egula idad siendo
solo necesa ias unas pequeñas di ec ices pa a empeza , has a las euniones
semanales en ado el segundo cua imes e pa a i apun alando dudas y
cambios.
Se discu ió que además de los hi os de implemen ación necesa ios pa a la
ealización del p oyec o exis ía la necesidad de desa olla una ase de de
p epa ación p e ia que esul ó ene una cu a de ap endizaje bas an e
ma cada, ya que el lenguaje de p og amación y el pa adigma en el que se
desen uel e Scala (híb ido en e la p og amación o ien ada a obje os y la
uncional) nunca habían sido dadas po el alumno. Es o sumado a la ju en ud
(y po an o escasamen e documen adas) de las biblio ecas usadas suma on un
a o añadido al p oyec o.
Pos e io men e a es o y bajo p e ia eunión con los u o es se es ablecie on
es hi os de igu osa implemen ación pa a la ealización del p oyec o. En la
siguien e sección paso a desc ibi los b e emen e y con la me a in ención de da
una idea gene al del abajo hecho. Pos e io men e explica emos
de alladamen e el abajo ealizado desde un ace camien o más igu oso.
19
2.3.1. Fases del p oyec o
P epa ación p e ia, comp endió los meses en e oc ub e y eb e o,
iempo que el alumno usó pa a amilia iza se con el lenguaje Scala,
aliéndose de lib os de la acul ad [7] o ealizando cu sos online, como el
dado po Ma in Ode sky, c eado del lenguaje, en Cou se a
5
.
Pos e io men e a es o hubo que amilia iza se con el uso de las biblio ecas
ScalaCheck
6
y specs2
7
necesa ias pa a la especi icación de los es s,
labo bas an e compleja debido a la poca documen ación exis en e dado
que las he amien as usadas son bas an e ecien es, lo que en muchos
casos di icul ó el ap endizaje y la adap ación po pa e del alumno.
Po úl imo la con igu ación del en o no necesa io pa a el desa ollo (sb ,
ScalaIDE, gi Hub y T a is CI, he amien as que desc ibi emos en la
sección 3 de es a memo ia) equi ió especial dedicación, debido p ime o a
la complejidad a la ho a de coo dina las e siones de cada biblio eca pa a
que el p oyec o compila a y segundo po que el alumno no había abajado
nunca con un so wa e de in eg ación con inua sumado a la ges ión del
uso de una he amien a pa a la ges ión y cons ucción de p oyec os como
es sb .
Hi o 1, apun alados los conocimien os necesa ios se p ocedió a la
implemen ación del p ime hi o en el cual implemen amos un gene ado
ScalaCheck a pa i de la lec u a de casos de es se ializados en un
iche o a o (se decidió po es e ipo de iche os como o ma o de
se ialización ya que o ece la posibilidad de almacena da os jun o a su
schema, es deci , la o ma en la que es án es uc u ados los da os). Dicho
gene ado debía de ol e los da os leídos desde el iche o has a su inal o
en caso con a io, has a lee la úl ima en ada y segui de ol iendo es e
úl imo da o has a la inalización de la p ueba. El p incipal e o de es a ase
ue encon a la o ma en la que el gene ado u iese es ado, de mane a
que supié amos cuándo odos los casos de es del iche o habían sido
leídos y e i a que el es alle y e mine ab up amen e.
Hi o 2, los esul ados del p ime hi o son usados pa a ob ene
gene ado es scalaCheck desde ba ches Spa k con mues eo. La idea
p incipal es la de ob ene , a pa i de un RDD (unidad básica de
abs acción de Spa k, explicado con mayo de alle en la sección 3) con un
ipo gené ico, una mues a de da os con un amaño especi icado po el
5
h ps://www.cou se alk.com/p o ide s/cou se a/cou ses/ unc ional-p og amming-p inciples-in-scala
6
h ps://www.scalacheck.o g/documen a ion.h ml
7
h ps://e o ebo e.gi hub.io/specs2/guide/SPECS2-3.8.3/o g.specs2.guide.Use Guide.h ml
20
usua io y de ol e pa a cada egis o con enido un gene ado scalaCheck
del mismo ipo. Indicando ambién si llegado al inal de la mues a se
de uel e el úl imo egis o leído o si po el con a io se de uel e un e o
(indicado po un gene ado allido). Implemen amos es a uncionalidad,
p ime o leyendo desde un iche o a o y luego ans o mando lo leído a un
RDD, pa a pos e io men e mues ea en una lis a que nos pe mi a ex ae
egis os y de ol e los den o de un gene ado .
Hi o 3, concluidos los hi o 1 y 2, la idea p incipal es la de implemen a
gene ado es incisi os. De o ma que al implemen a un es , cuando un
caso de es no sa is aga una p opiedad especi icada po el usua io, no
pe damos es e con aejemplo. Los casos de es los ob enemos desde un
gene ado que de uel e egis os ex aídos desde un RDD. Siendo el in
el se capaces de almacena es e con aejemplo en un iche o de mane a
que es e hallazgo pe sis a y pos e io men e, una ez el usua io a egle el
mo i o po lo que la p opiedad alló, pueda se ca gado y p obado de
nue o. Pa a ello nos alemos de p opiedades de o den supe io que nos
pe mi en especi ica un gene ado de e minado, una p opiedad y una u a
desde la cual ca ga los da os y p oba pa a odos la casos si la p opiedad
se man iene.
Analizando los hi os, se puede ap ecia que el p oyec o oca una pa e del
p og ama es udiado a lo la go de la ca e a. Con el desa ollo de es a
he amien a se ponen en p ác ica conocimien os de p og amación (FP, TP
y EDA) y lógica ma emá ica. Pe o ambién puso a p ueba la capacidad del
alumno de ap endizaje y adap abilidad, amilia izándose con la
p og amación uncional, el a amien o de iche os se ializados, la
implemen ación de es s de unidad y el uso del amewo k Spa k.
Dado que el abajo se desa olló de mane a indi idual el alumno no
alo ó la necesidad de elabo a un plan de p oyec o p opiamen e dicho
jun o a una especi icación de equisi os, al no se una aplicación como al,
se decidió desca a es e ace camien o.
21
3. Tecnologías empleadas
An es de explica el desa ollo del p oyec o, es ele an e da a conoce las
he amien as (so wa e) que se han u ilizado pa a pode lle a lo a cabo. Es e p oyec o
no ha necesi ado de ningún sopo e ha dwa e especial. Se abajó sob e un o denado
pe sonal con las ecnologías desc i as en es e apa ado. Valiéndose en muchos casos
de biblio ecas expe imen ales y de co a exis encia y que ca ecían de ningún ipo de
sopo e écnico al momen o de ealiza se es e p oyec o debido a la ju en ud de la
ecnología en la que se basó es a he amien a (la p ime a e sión es able de Spa k
da a del 2014).
3.1. Lenguajes y biblio ecas
A con inuación p esen o cada una de las ecnologías usadas en es e p oyec o
jun o con un b e e esumen de las mismas y su apo ación.
Scala ( e . 2.10.6) es un lenguaje de p og amación mul i-pa adigma diseñado
pa a exp esa pa ones comunes de p og amación en o ma concisa, elegan e y
con ipos segu os. In eg a ca ac e ís icas de lenguajes uncionales y o ien ados
a obje os. La implemen ación ac ual co e en la máquina i ual de Ja a y es
compa ible con las aplicaciones Ja a exis en es. Como ex a añadido Spa k
es á esc i o en Scala, po lo que e a con enien e decan a nos po es e
lenguaje.
ScalaCheck ( e 1.12.2)
8
es una he amien a pa a es eo de p og amas
esc i os en Scala y Ja a desa ollada po Ricka d Nilsson, basado en una
biblio eca de Haskell del que ambién coge su nomb e llamada QuickCheck.
Pe mi ió de ini las p opiedades que desc iben el compo amien o de los lujos
de da os y de co obo a que es as se cumpliesen. Todos los da os de p ueba
se gene an de o ma au omá ica y de o ma alea o ia. Po no ma gene al al
ejecu a un es ScalaCheck gene a 100 casos dis in os alea o ios y si son
sa is ac o ios el es se da po pasado.
Spa k - Spa k S eaming ( e . 1.6.1.) es un amewo k de código abie o pa a
la compu ación en pa alelo de clús e es. O iginalmen e desa ollado po la
Uni e sidad de Cali o nia y luego donado a la undación Apache. P o ee una
in e az pa a la p og amación de clús e es con pa alelismo implíci o de da os y
con ole ancia a allos. Pe mi ió ca ga median e RDDs (ac ónimo pa a esilien
8
h ps://gi hub.com/ ickynils
22
dis ibu ed da ase , su es uc u a de da os cen al que ep esen a una colección
pa icionada de elemen os inmu ables que pueden se ope ados en pa alelo),
ba ches desde local pa a su pos e io a amien o, análisis y es eo. También
ue on usados Da aF ames, o a ipo de colección dis ibuida que o ece Spa k
den o de su biblio eca Spa kSQL con columnas nomb adas.
Specs2
9
( e . 3.6.4) es una biblio eca que nos pe mi e esc ibi especi icaciones
ejecu ables basadas en Scala. In eg a ScalaCheck, lo que nos pe mi ió ene un
pequeño ecosis ema que in eg aba nues as p opiedades, gene ado es y un
ámbi o de inido en el que se desa ollasen los es s, odo en una sola clase.
Sscheck ( e . 0.2), he amien a esc i a en Scala que pe mi e el es eo con
scalaCheck pa a p og amas Spa k y Spa k S eaming. Pa a la implemen ación
de los es s de unidad usa la biblio eca specs2 que a su ez in eg a
pe ec amen e ScalaCheck.
T a is-CI
10
es un se icio alojado y dis ibuido de in eg ación con inua, que nos
pe mi e c ea y es ea p oyec os c eados en Gi Hub. Nos pe mi ió p e io
acceso a su web lle a el con ol de los commi s y push que se ealizaban en el
eposi o io y si es as ac ualizaciones habían pe mi ido que el p oyec o se
cons uyese de mane a sa is ac o ia, ejecu ando y mos ando los esul ados de
los es s c eados ( e imagenes 3.1 y 3.2).
SBT
11
( e 0.13), es una he amien a de código abie o pa a cons ui p oyec os
Scala y Ja a simila es a Ma en, del cual hablamos b e emen e en la sección
4.1, pe o dejando de lado su es uc u a XML. Pe mi ió median e un plugin pa a
Eclipse c ea un a chi o especi icando las biblio ecas usadas en el p oyec o lo
que acili ó la po abilidad de es e, ya que compilando con sb desde consola en
cualquie o denado pe mi ía desca ga se odas las biblio ecas necesa ias pa a
la co ec a ejecución del p oyec o.
9
h ps://e o ebo e.gi hub.io/specs2/
10
h ps:// a is-ci.o g/
11
h p://www.scala-sb .o g/
23
Imagen 3.1. In e az web de T a is-CI a isando de una cons ucción allida.
Imagen 3.2. Log con el esul ado de los es s ejecu ados mos ado po T a is-CI.
24
A ohugge
12
( e 0.10.1) es una he amien a que pe mi e la c eación de
case-classes de Scala a pa i de una iche o a o que especi ica un schema
de e minado. Fue usado en el p oyec o como ace camien o a la
implemen ación del hi o 1 pa a la c eación de clases dado un iche o a o que
con enía da os y su espec i o schema embebido.
Scala o
13
( e . 0.6.2) es una biblio eca que pe mi e, en iempo de ejecución y
basándose en la e lexión, la des/se ialización de da os desde Scala hacia un
a chi o a o. Fue usado en el p ime hi o ( e sección 4.2), como he amien a
pa a la c eación de un iche o a o con los da os ob enidos en los es s. Se
descon inuó su uso ya que, aunque pe mi ía la se ialización de da os, no incluía
en el iche o el schema, po lo que en el siguien e hi o se hizo uso de la
biblio eca Spa ka o.
Spa ka o
14
( e 2.0.1) es una biblio eca pa a la lec u a y esc i u a de da os
a o desde Spa kSQL. Usado en el hi o 2 pa a la c eación de da a ames que
nos pe mi ie on a pa i de un iche o a o a a los da os en Spa k p e ia
con e sión a RDDs y así pode ealiza mues eos.
Apache A o
15
( e 1.7.7) es un amewo k desa ollado den o del p oyec o
Apache Hadoop. Usa JSON pa a de ini ipos de da os y pe mi e se ializa
in o mación pe sis en e en bina io. Incluye den o del iche o a o que c ea la
mane a en la que se es uc u an los da os.
3.2. En o no de desa ollo
La he amien a sscheck ue desa ollada usando el IDE pa a Scala de Eclipse
po lo que e a na u al segui u ilizando es a opción. El p oyec o es á
con igu ado en un ecosis ema en el que en el que Scala-IDE e a usado pa a la
codi icación del p oyec o y su ejecución. A su ez es e es aba in eg ado a un
eposi o io en gi hub.
En lo que se e ie e a cons ui el p oyec o es a labo quedó elegada al sb po
lo que el alumno u o que amilia iza se con es a he amien a y su uso desde
consola. Hubo que ap ende a especi ica las biblio ecas usadas en el a chi o
12
h ps://gi hub.com/julianpee e s/a ohugge
13
h ps://gi hub.com/Gensle AppsPod/scala o
14
h ps://gi hub.com/da ab icks/spa k-a o
15
h ps://a o.apache.o g/
31
Imagen 4.7. Tes supe ado exi osamen e.
Pa a de aul ToLas igual a alse y odos los demás pa áme os conse ando el
mismo alo los esul ados se pueden ap ecia en las imágenes 4.8 y 4.9 donde
después de de ol e el quin o egis o y no habiendo más que lee , se de uel e
un Gen.Fail, el es se in e umpe y se da po allido.
Imagen 4.8. Al in en a p oba el sex o caso el es alla.
Imagen 4.9. Resul ado del es .
32
4.3. Hi o 2
Como segundo hi o, y aliéndonos de los esul ados ob enidos en el p ime o,
nos cen amos en implemen a un gene ado de o den supe io ScalaCheck
que abaje con lo es de Spa k, es deci que dada una unción que ecibe un
RDD[A], es a de uel e un Gen[A], siendo A un ipo gené ico.
Los RDD pueden alcanza amaños in a ables, especialmen e si es amos
abajando en un en o no local, po lo que un gene ado de casos de es que
ex ajese da os di ec amen e se ía un ace camien o e óneo. Se decidió
implemen a un p ime plan eamien o con una clase F omRDDGen que se basa
en la es uc u a implemen ada en el p ime hi o, pe o que además ecibe un
pa áme o en e o bu e Size.
La idea es, dado un alo en e o, u iliza la unción RDD. akeSample() que
implemen an los RDDs y que nos pe mi e ealiza un sampleo de ese amaño y
gua da esos casos de es en una lis a concu en e. Un RDD en ningún caso
se modi ica ya que es un obje o inmu able, es deci , una ez c eado, los
elemen os que almacena no pueden se al e ados. Una ez hemos ob enido la
mues a, implemen amos una unción que dada una lis a de casos de es , los
a ex ayendo uno po uno y de ol iendo en uel o en un Gen[A].
Análogamen e a lo ealizado en el p ime hi o implemen amos ambién una
a iable de aul ToLas que de e mina si una ez llegado al úl imo caso de es
es ex aído y de uel o o simplemen e de uel o n eces has a sa is ace el es .
P obamos es e ace camien o de iniendo un es con specs2. P ime o, pa a
pode u iliza Spa k hace al a ene un con ex o con igu ado, la he amien a
sscheck de ine ya uno, es e con ex o de ine el pun o de en ada pa a odas las
uncionalidades de Spa k, con el cual podemos especi ica la conexión a un
clús e y pode c ea RDDs. En el es especi icamos la u a que almacena los
casos de es s, c eamos el RDD y de inimos odos los pa áme os necesa ios
pa a la clase F omRDDGen ( e imagen 4.10). Dado que a amos con iche os
a o, es necesa io lee los de mane a especial. Pa a pode lee los Spa k nos
o ece una biblio eca llamada Spa kSQL, que nos acili a la lec u a desde es e
ipo de iche os a da aF ames conse ando su schema. Un da aF ame
o ganiza sus da os en columnas y nos pe mi e la con e sión a RDD de mane a
inmedia a.
Pa a de aul ToLas igual a ue, un mues eo de 3 casos de es y un mínimo
de es pasados igual a 5 el compo amien o espe ado es el indicado en las
imágenes 4.11 y 4.12 donde, en la p ime a imagen especi icamos los
pa áme os necesa ios pa a la ca ga de los casos de es y p ocedemos a la
c eación del RDD a pa i del iche o a o que con iene 10 en adas. En la
33
segunda imagen se puede obse a cómo de uel o el 3 egis o se p ocede a
de ol e es e mismo o as dos eces, se da po bueno el es y el con ex o de
Spa k se de iene au omá icamen e.
Imagen 4.10. Pa áme os de la clase F omRDDGen.
Imagen 4.11. Resul ado de la ejecución del es pa a F omRDDGen.
Aunque es e plan eamien o pueda pa ece adecuado y hayamos log ado
implemen a un gene ado a bi a io, es deci , un gene ado que en luga de
de ol e da os alea o ios de uel e da os a pa i de unos casos de es
ex aídos de un RDD y que conocemos. Su gen algunos p oblemas a ene en
cuen a: si buscamos e alua es os gene ado es con u u as p opiedades
scalaCheck nos e emos en la obligación de ealiza muchos mues eos,
incluso al ez del o al de los elemen os del RDD. La unción
RDD. akeSample(), usada pa a mues ea los casos nos pe mi e, modi icando
un pa áme o Booleano que ecibe llamado wi hReplacemen , especi ica si
que emos que las mues as no se epi an. Pe o nos emos en la misma
si uación ya que aunque la mues a no con enga casos epe idos el RDD sigue
siendo el mismo ya que es inmu able po lo que nos podemos opa con un es
que al e alua una p opiedad nos dé un also posi i o.
Pa a sol en a el p oblema de ene siemp e la misma uen e de mues eo
ealizamos algunos cambios a la clase an e io y c eamos o a llamada
F omRDDReplacemen Gen, que ecibe los mismos pa áme os pe o en es e
caso el RDD consis e en una upla [caso de es , id único]. Es a clase nos
pe mi e, en sucesi as mues as c ea , un RDD nue o solo con casos de es no
seleccionados. Es e RDD es asignado a una a iable dd y no a un alo ya que
34
así podemos easigna la a iable una ez hayamos mues eados los casos de
es a un nue o RDD il ado. Hacemos es o, p ime o, po que los alo es [ al]
en Scala son lo que, a una a iable inal supone en Ja a, una ez asignados no
se pueden cambia y segundo po que un RDD es inmu able y no se puede
modi ica po lo que debemos c ea uno nue o ( e imagen 4.12).
Es a ope ación iene un cos e cons an e ya que un RDD en sí no con iene los
da os p opiamen e dichos sino que almacena los me ada os necesa ios pa a
pode a a los en memo ia y a menos que ealizamos un RDD.collec () la
he amien a no se e en la necesidad de e-compu a odos los da os cada ez
que se haga un mues eo lo que supond ía que la ope ación u iese un cos e
lineal.
Imagen 4.12. Fil ado del RDD de la clase F omRDDReplacemen Gen.
Una ez modi icada es a clase, el es que se implemen a con specs2 lee el
iche o a o con los casos de es s desde la u a especi icada y c ea el dd con
las uplas. Pa a es o se ale de la unción RDD.zipWi hUniqueId(). Si enemos
un iche o con 10 casos de es , especi icamos como 10 ambién la can idad de
es s pasados y un mues eo de 5, el esul ado espe ado es que odos los
casos de es s se án e aluados. Como se mues a en la imagen 4.11 donde
después de de ol e los p ime o 5 egis os se a isa que el bu e es á acío y
se p ocede a un nue o mues eo, ex ayendo los egis os es an es del RDD
sin que ninguno se epi a. Una ez inalizado el es se de iene el con ex o
Spa k y se da el es po pasado.
35
Imagen 4.13. Mues eo con il ado.
4.4. Hi o 3
Alcanzados los obje i os es ablecidos en el p ime y segundo hi o, en es e
úl imo nos cen amos en implemen a una p opiedad de o den supe io , es
deci , que eciba o a p opiedad y un casos de es como pa áme os y que sea
capaz de almacena el caso de es que esul e se un con aejemplo.
Pa a ello, c eamos una clase Incisi eP op y nos cen amos en c ea una unción
o All[A] ( e imagen 4.14) que ecibe un gene ado de ipo gené ico Gen[A] y
una u a con casos de es . La idea es que dada la u a podamos ca ga los
casos de es usando los esul ados del an e io hi o a una a iable mixedGen.
P ime o u ilizamos los da os que p opo ciona el Gen[A] y una ez que se
acaben pasamos a usa los casos de es ca gados desde iche o. El obje i o
es pode al e na en e un gene ado que engamos con casos de es y o os
que engamos gua dados en disco.
Imagen 4.14. Función o All de o den supe io .
Una ez hayamos esuel o la uen e de casos de es , c eamos un alo de
Scala de ipo p opiedad llamado p op y dado un mixedGen, e aluamos el caso
de es con una p opiedad x. Es a p opiedad es especi icada en el es de
p ueba median e el uso de la unción P op de ScalaCheck. El esul ado,
ob enido como una unción pa cial es esuel a po , que inalmen e lo de uel e
como un ipo P ope y ( e imagen 4.15).
36
Imagen 4.15. Scalacheck P op de o den supe io que e alúa el caso de es .
Pa a pode gua da el con aejemplo en caso de que algún caso de es
incumpla la p opiedad, ede inimos la unción P op de ScalaCheck de o ma
que, además de e alua es a p opiedad, pueda gua da el con aejemplo que
no la sa is ace. Es o lo log amos aliéndonos del es ado de Resul : si la
p opiedad no se cumple oma á el alo P op.False, la implemen ación se
mues a como indica la igu a 4.16, en la que dado un i que dis ingue casos
según su alo , si es e esul a se P op.False llamamos a una unción
w i eToFile que gua da el con aejemplo en un iche o.
Imagen 4.16. Ex ac o de la ede inición de P op, pa a el gua dado del con aejemplo.
Pos e io men e se implemen a on ambién sob eca gas de la unción o All de
mane a que pueda acep a de 2 a 4 gene ado es y de 2 a 4 u as de iche os
espec i amen e. En cada una de es as si uaciones end íamos uplas de
gene ado es de casos de es y un con aejemplo se conside a ía como al si
una p opiedad x no se man iene pa a una upla y. Pa a la imagen 4.17 con 2
gene ado es y 2 u as de iche o, se esuel e ecu si amen e p ime o la unción
o All pa a 1 gene ado y 1 u a. El esul ado ob enido se e alúa median e una
unción pa cial con el segundo gene ado y la segunda u a.
Imagen 4.17. Función o All pa a dos gene ado es y dos u as.
37
Finalizada la implemen ación del gene ado incisi o, p ocedemos a c ea una
clase Incisi eP opTes . En es e es p obamos median e un gene ado sencillo
Gen.oneO (), que nos pe mi e especi ica manualmen e unos alo es como
pa áme os eligiendo uno alea o iamen e. De inimos dos casos pa a dos
unciones o All() la p ime a p2 con 2 gene ado es y o a p1 con 1.
Como se puede obse a en la imagen 4.18 pa a dos alo es en e os que
pueden se posi i os o nega i os, elegidos po los gene ado es, especi icamos
una p opiedad que dado un alo , el p oduc o de x e y debe se mayo que
pa a que se sa is aga. Análogamen e pa a p3, una p opiedad que compa a dos
s ings. Especi icamos un gene ado sencillo en e dos palab as. La p opiedad
se e alúa a ue o alse si las palab as coinciden. El alo gene ado se de uel e
almacenado en sen ence y si es igual a “adios” se sa is ace la p opiedad.
4.18. Implemen ación de los dos es de p ueba.
El esul ado de la ejecución se obse a en la imagen 4.19. Pa a p2, de inimos
dos ejecuciones, una con igual a -7 y o a con igual a -3. Como
especi icamos un mínimo de 1 es pasado, pa a igual a -7 la p opiedad se
cumple con la upla [-5, -3] y la p opiedad se e alúa a ue. Sin emba go, pa a
igual a -3 y la upla [2,-10] la p opiedad no se cumple, po lo que el esul ado es
alse. Es a upla nos si e de con aejemplo po lo que la gua damos en el
iche o “coun e Examples. x ” ( e imagen 4.20). En ambos es pa a
simplicidad del ejemplo es ablecemos que no hay casos de es que ca ga
desde disco.
38
4.19. Resul ado de la ejecución de los es s.
4.20. Fiche o donde se gua dan los con aejemplos.
4.5. Ejemplo
En es a sección mos amos con un sencillo ejemplo lo alcanzado con la
implemen ación del gene ado incisi o. Pa a ello, seguimos la línea del ejemplo
usado en la sección 2.1 pa a desc ibi sscheck y su uncionamien o.
Tenemos un iche o a o con 50 en adas y su espec i o schema. Cada una de
las en adas albe ga una upla [use ID, us able] que de e mina si un usua io
es de ia o no, en es e caso amos a de ini una p opiedad que e alúe la
consis encia de los nomb es usados po cada usua io. De inimos una p opiedad
p1 que dada un gene ado y una u a a un iche o a o, e alúa los casos de es
ca gados a un RDD como se mues a en la imagen 4.21. La p opiedad dic a
que dado un use ID si ans o mamos odos sus ca ac e es a mayúscula y
luego a minúscula el esul ado debe ía se igual si di ec amen e cambiamos
odos a minúscula.
39
Imagen 4.21. Implemen ación de la p opiedad p1.
Pa a un mínimo de 30 es pasados y ealizando mues eos del RDD de 5
casos de es po ez, el esul ado es el que se mues a en la imagen 4.22.
Después de 11 ejemplos e aluados nos encon amos con el nomb e de un
usua io que iene un ca ác e Unicode que compa e con muchos o os el
mismo ca ác e en mayúscula. Es o supone que la p opiedad no se man enga,
el es alle y se de enga el con ex o Spa k no sin an es gua da el
con aejemplo en el iche o.
Imagen 4.22 Resul ado de la ejecución del es .
Imagen 4.23 Fiche o que almacena los con aejemplos.
40
5. Conclusiones
En es a sección concluyo la p esen e memo ia añadiendo una alo ación pe sonal
sob e el p oyec o en el p ime pun o y el posible abajo u u o que se pod ía ealiza
a pa i de la ex ensión de la he amien a sscheck en el segundo pun o.
5.1. Valo ación pe sonal
Pa iendo de los equisi os iniciales, que consis ían en desa olla una ex ensión
de la he amien a sscheck que pe mi iese el es eo de p og amas Spa k y
Spa k S eaming con la ca ga de casos de es desde iche os a o y el
gua dado de con aejemplos en un iche o pe sis en e, el p oyec o ha cumplido
los equisi os básicos es ablecidos al inicio del p oyec o.
Sin emba go, la uncionalidad del p oyec o iene algunas limi aciones, ya que
po simplicidad se decidió gua da los da os en un iche o simple en local y
debido a la cu a de ap endizaje, que esul ó se más p onunciada de la
espe ada po el alumno, hubo que sup imi cie as implemen aciones: no se
pudo p oba en un en o no de lujo con inuo de da os que simulase el uso de
Spa k S eaming. Todos los ejemplos ealizados en es e p oyec o se basa on
en la c eación de lo es de da os desde Spa k Co e. Tampoco se pudo p oba
en un en o no eal con da os eales y que pudiesen pone a p ueba la u ilidad
de la he amien a.
Como pun o inal, c eo que es e p oyec o supone pa a mí un buen inicio de
ca a a in oduci me de lleno en el mundo big da a. He enido la opo unidad de
abaja con un amewo k que cada ez es á eniendo más acep ación po
pa e de muchas emp esas, dado que, en cie os en o nos, es mucho más
ápido que el en o no usado de ac o, Hadoop
18
. Además, el habe enido que
ap ende un lenguaje como Scala, sin ninguna noción de p og amación
uncional, supuso pone a p ueba los conocimien os adqui idos du an e la
ca e a y ambién e mi capacidad de adap ación y ap endizaje. Po úl imo, el
p oyec o signi icó una p ime a oma de con ac o con he amien as de es eo,
c eo que es algo a ene en cuen a, ya que como al no se nos enseña en
ninguna asigna u a del g ado y conside o que es un alo añadido pa a mi
cu ículo y de ca a a en en a me al mundo labo al.
18
h p://www.da as ax.com/de /blog/how-much- as e -is-spa k- han-hadoop-in-da as ax-en e p ise