Press "Enter" to skip to content

GOTO 2015 • Data Science at Scala with Spark • Dean Wampler


quindi ho fatto consulenza sui big data
per un po ‘di tempo prima di iscrivermi a typesca
lavoro su strumenti come spark e I pretty
vero mi sono reso conto abbastanza rapidamente che è
gli strumenti erano terribili quindi ho iniziato
tornando indietro nella comunità, sai
2012 o giù di lì quando ho iniziato di nuovo in quelli
giorni in genere se si voleva fare grandi
scienza dei dati su larga scala
in genere è come se si crea il tuo
modelli in Python e così via e poi
gettali oltre il muro per un po ‘di Java
gli sviluppatori di scrivere il codice MapReduce che
tipo di risucchiato e di cui non ho parlato
tre anni fa alla Scala nord-orientale
simposio in cui ho sostenuto che i big data
deve essere funzionale e cosa intendevo
da quello è che lui sa che amo quello che
Martin e Todd hanno detto stamattina
programmazione funzionale può essere un po ‘
religioso e dogmatico a volte o a
meno certe persone nella comunità
ma ci dà il diritto
astrazioni per lavorare con dati e
pensandoci come valori immutabili
ci trasformiamo e così via e si trasforma
fuori che SQL è in realtà un funzionale
linguaggio di sorta e questo è sempre
ci ha servito davvero bene, così sai prima
di tutti si potrebbe dire bene perché usare il
JVM beh sai che penso che tutti noi sappiamo
è che è ben consolidato
la piattaforma è in scala estremamente
beh, sono solo un sacco di strumenti che abbiamo avuto
per un po ‘di programmazione diversa
lingue ora come Scala e chiusura in
Oltre a Java quelli sono matematica
librerie a destra per in Scala
l’algebra ispira che non parlerò davvero
circa e poi ti abbiamo fatto conoscere maturo
ambienti di sviluppo e in questi giorni
abbiamo un ecosistema molto maturo di
strumenti principalmente intorno all’ecosistema Hadoop
ma non necessariamente tutti quelli che lo lasciano
noi conosci approccio diversi tipi di
problemi di dati su scala sai che c’è
solo una lista di alcuni di essi qui
parleremo di scintilla un po ‘
un po ‘un predecessore per scintillare che era molto
influente era scottante su Twitter
ha scritto che si trovava in cima a MapReduce e
in effetti gli uccelli ci sono loro
summing bird che è uno strumento che
astratto / scottature e tempesta così per lo più
quello di cui parlerò è nel
il contesto del colpo fa ma non è specifico
a Hadoop Areli, ma in qualche modo imposta il
palcoscenico
per quello che dobbiamo fare su scala, penso
in realtà quanti di voi hanno effettivamente
era solito fare prima di accettare la maggior parte di voi
Non ho intenzione di passare molto tempo
parlando del successo, perché è soprattutto
familiare ma solo per darti un senso è
tipo di sai come ti avvicineresti
scienza dei dati su larga scala e molto
schematicamente l’aspetto del cluster Hadoop
qualcosa come questo dove tu hai
masternodes che possiedono i lavori
che stai andando a correre sul
sistema quindi per esempio questa risorsa
manager è l’attuale un modo dupe di
gestendo un lavoro che lo invii
capisce quando ha risorse da gestire
il tuo lavoro e lo trasforma in compiti
che vengono eseguiti nei nodi slave e
delegati a questi gestori di nodi
conoscere l’effettiva esecuzione e monitoraggio
dei tuoi compiti localmente su ogni macchina
e poi sotto Hadoop ha sempre
stato chiamato questo file system distribuito
HDFS per file system distribuito Hadoop
ha i suoi servizi il nome è nota
il master per l’intero file system e
quelli tutti i metadati su file e
poi ha note di dati che gestiscono tutto
i blocchi che sono su hard disk
intorno al cluster e tu sai
tradizionalmente scriveresti MapReduce
lavori inviati al cluster
attraverso il gestore delle risorse oggi
e sarebbero quindi programmati e gestiti
e questo è bello se sai scrivere
MapReduce il codice ma non è proprio così
uno scenario ideale per molte persone così
cosa fa MapReduce come funziona
brevemente concettualmente uno dei
esempi che ho intenzione di passare ma non
in realtà in MapReduce ne parlerò
nel contesto della scintilla è un equo
famoso algoritmo chiamato invertito
indice ed è una specie di cosa fai
è un’implementazione minima per
qualcosa come un’appliance di ricerca o
Google o qualunque cosa tu sappia io
avere tutte queste pagine su internet o
alcuni repository di documenti che voglio
crea un indice lo chiamano al contrario
indice o invertito perché sto andando a
trova tutte le parole in questo documento e
costruire un indice di parola per tutti i
posizioni che la parola può essere trovata e io
voglio anche sapere i conteggi perché
ovviamente sono probabilmente più interessato
in documenti che parlano in grande profondità
su un argomento non quelli che lo menzionano
di passaggio quindi vorremmo calcolare
Questo
se davvero vuoi vedere una sorta di
dettagli su come funziona
MapReduce Ho alcune diapositive bonus su
la fine del discorso che non volevo
per passare ora, ma l’idea è questa
Sto per passarlo attraverso alcuni
miracolo un po ‘di cluster e poi sta andando
per far apparire l’altra estremità e cosa deve
capita come un passo precursore siamo noi
avremo dei web crawler che vanno
su internet e trovare tutti questi
documenti e scrivere un set di dati iniziale
che ha come un tavolo a due colonne
se vuoi il luogo in cui si trovava
trovato o qualche ID che lo rappresenta
posizione e poi il contenuto e poi
ancora una volta l’indice invertito che viene
l’altra estremità sarà indicizzata da
parole e poi una lista di luoghi dove
la parola si trova in essa sai
frequenza e solo per ingrandire un po ‘
un po ‘questo è quello che sai tipo di
i dati sarebbero come se stessimo strisciare
wikipedia potrebbe sembrare qualcosa di simile
questo, ma non lo farò, non voglio burlare
il punto troppo e l’output sarebbe
sì mi sono dimenticato di questo del conto così
comunque affrontando il problema
problema con MapReduce in cui ci siamo imbattuti
e la ragione per cui lo sapevi che trollare
un paio di anni fa era in realtà
veramente difficile mappare i problemi fino ad a
basso livello a grana molto grossa hai
questo passo mappa che fa iniziale
elaborazione e un passo ridotto che richiede
quei dati temporanei e tu sai
lo riduce al tuo risultato finale
che di nuovo ho saltato i dettagli
per tempo puoi trovarli alla fine di
il discorso se vuoi e questo è questo
uno dei motivi per cui la maggior parte dei dati
lo scienziato non si è mai preso la briga di imparare davvero
MapReduce perché era uno spreco di
il loro tempo per padroneggiare gli arcani di tale
un sistema di basso livello invece li conosci
permetterebbe agli esperti Java di ingegnere Java
preoccupati che sia davvero così
è diventato una specialità sub è sapere come
scrivi il codice MapReduce su come effettivamente utilizzare
quell’API così in effetti se davvero vai
attraverso il codice Java sembra qualcosa
come questo so che non puoi leggere questo a
font a sei punti ma è come è
qualcosa come penso anche un modo per cosa
era come 80 linee di codice, ma lo era
codice arcano molto dettagliato del tipo di
roba che avrebbe trascorso ore a scrivere unità
prova a fondo che era un’altra cosa
era difficile da fare in MapReduce no
qualcosa che si vuole veramente fare per
cos’è concettuale
un algoritmo molto semplice quindi vogliamo
vedere un modo migliore per farlo in un modo
è bene possiamo stratificare un livello più alto
astrazioni in cima a questo almeno
rendere più facile per le persone a lavorare in
concettualmente come flussi di dati o
sequel e il primo che divenne
estremamente popolare era una query sequel
strumento che genererebbe lavori MapReduce
per te dove stai fondamentalmente usando
sequel come linguaggio specifico del dominio per
il problema e potresti scrivere cose
in questo modo crea alcuni dati di caricamento della tabella
dentro e poi a destra sai selezionare
query sui dati non era un
database transazionale cosa è ancora
intorno quindi non è come in passato
è stato davvero puramente per mettere il
query in SQL e non lo era
progettato per fare cose di livello record
è stato progettato per le scansioni del tavolo che amo
questo strumento così tanto anche se non lo faccio
considerami una persona sequel che io
ho scritto un libro su questo perché volevo
per assicurarsi che le persone sapessero come usarlo
perché era così utile per una sorta di
8020 problema del tipo di cose
la gente ha fatto almeno analisi di base
ma il problema era che avevi
scrivere eventuali estensioni che potresti
voglio così chiamato definito dall’utente
funzioni e Java che ha portato di nuovo
torni a lavorare con gli ingegneri
e capire come distribuire questo e tutti
questo genere di cose, non si può solo
come incorporare una funzione o una classe Java
all’interno della tua query hive e poi solo
se lavori, devi passare molto
di rigmarole per estendere l’alveare c’era
un altro strumento che è diventato popolare chiamato Pig
questo è scritto su Yahoo e il nome
era una specie di incidente e solo una specie di
bloccato intorno e il dialetto è chiamato
Pig Latin okay questo è uno strumento per il flusso di dati
è progettato per un po ‘meglio
il tipo di scenario in cui vado
basta camminare i dati attraverso una serie di passaggi
di trasformazione può essere biforcazione del
dati e sai che ne hanno due
condutture che stanno facendo diversamente
le cose questo è in realtà fondamentalmente il
stessa cosa ho appena mostrato un semplice
situazione in cui carico alcuni dati e io
proiettare solo una colonna per così dire
di quel dato maiale è una specie di strano
linguaggio in termini del suo non familiare se
si sa che non si Sequel tipo di look
come Java e non è completo
quindi ancora una volta sei un po ‘bloccato
una situazione di te sa se voglio
estendilo devo scrivere codice in
frequentare un’altra lingua in un link
anche se in questo caso potresti usare
Python e Ruby pari e JavaScript se
tutto ciò che può essere eseguito è in una JVM
che potresti effettivamente usare non lo sei
limitato a Java che era bello ma
il mio preferito in questa fase iniziale di nuovo
intorno al periodo di tempo del 2012 è stato questo
libreria scottante che sì scritta da
Twitter è in realtà una lingua da studioso
e ti mostrerò solo un codice veloce
esempio di ciò che effettivamente era
seduto sopra un’altra bella API
chiamato cascading che ti ha dato di più
astrazioni del flusso di dati anche se questo
aveva ancora una sorta di verbosità di pre
Java 8 mi ha insegnato davvero
avresti potuto usare la piaga lambda anonima
funzioni che ora abbiamo in Java ma
questo lo sapevi ancora diversi anni
fa e questo astraggerebbe molto del
problemi molti dettagli di basso livello
di scrivere il codice MapReduce in modo che tu
potrebbe scrivere un linguaggio di alto livello
tipo di cose e questo è quello che sembra
come nelle scottature non passerò attraverso tutto
i dettagli davvero voglio che tu ne abbia uno
senso di come conciso questo codice è che
Ho improvvisamente preso un software
problema di ingegneria e trasformato in a
scrivi un sacco di gente quando dici il
script di parole pensano che tu sappia che è
tipo di buttare via lo sai vero
gli sviluppatori non usano linguaggi di scripting
sai che senti tipo quella mentalità
invece scrivono centinaia e centinaia
delle linee codice java o altro che il
parte bellezza di questo è che sai che posso
molto velocemente leggere questo e una volta lo so
l’API che ha un po ‘pochi
idiosincrasie e conoscono il tipo di
concetti che tornano al funzionale
programmazione di like mapping e
filtraggio e mappatura piatta e cosa tutto
quelli significano e ti spiego la mappatura piatta
un po ‘se non sai cosa
significa, ma fondamentalmente ho intenzione di caricare
alcuni dati separati da tabulazione ho intenzione di
dividerlo in parole come sarebbe
il contenuto delle mie pagine di Wikipedia e
Ho intenzione di sputare alcune nuove tuple
e puoi scrivere letteralmente tuple con
parentesi in Scala avrà una parola
e l’ID quindi ho già fatto un capovolgimento
proprio lì è arrivato con un documento d’identità e poi
testo ora è parola un ID e poi il
ultimi passi in cui faccio gruppo da dove è
Porto insieme tutte le parole comuni
e fare conti finali per ottenere l’invertito
indice e il conteggio su ciascun documento
in realtà ho dimenticato che in realtà non lo faccio
conta qui quando vedi la scintilla
esempio è in realtà un po ‘di più
complicato di questo o sì
complicato è una buona parola solo perché
in realtà sta aggiungendo la capacità di
conta le occorrenze di parole per documento
che di nuovo è ciò che vuoi davvero
questo è leggermente semplificato ma penso
ti dà la sensazione che sapendo questo
API o qualcosa del genere e c’è a
API di chiusura che è così che puoi
sbattete questa roba davvero veloce
puoi sperimentare puoi giocarci
c’è una modalità locale per eseguire le cose
sul tuo laptop e a cascata questo è il
parola che vogliamo arrivare fino al
tipo di elaborazione dati non sequel come
che ci piace fare ma non ha risolto
tutti i nostri problemi e uno di loro era
che MapReduce è stato progettato sempre e solo
per eseguire l’elaborazione in modalità batch e quando
senti quella parola nei big data o al
almeno il contesto Hadoop significa sempre
Ho già trovato i dati parcheggiati
da qualche parte sei un file enorme
sistema e voglio solo ingerirlo tutto
o qualche grande sottoinsieme di esso e lo sai
un grosso lotto di elaborazione che non conosci
vivere non in tempo reale e così via
opposto allo streaming in cui ho dati
entrando e voglio analizzarlo come
il più rapidamente possibile e in realtà il mio
esempio preferito del perché lo streaming è
importante e crescente è importante
in realtà questo di cui abbiamo appena parlato
indice invertito in parte perché è così
qualcosa che puoi sicuramente fare in gruppo
modalità e questo è ovviamente il modo in cui
lo sai i motori di ricerca abituati a
fallo ma c’è sicuramente un
vantaggio competitivo se qualcuno lo fa
una modifica sulla loro pagina web e un web
il crawler lo colpisce saprai dire entro 20
minuti o qualcosa che ti piacerebbe davvero
che cambia per apparire immediatamente in
il tuo indice di ricerca e non conosci tre
ore da ora o stasera quando corri
il tuo lavoro in batch, così lo streaming lo rende perfino
senso per cose che non pensiamo
tanto quanto i flussi come questo set di dati
ma ha anche senso per cose come
un monitoraggio della manichetta antincendio Twitter sono
monitoraggio dei miei file di registro per segni di
anomalie nel sistema lo sai
tipo di cose quindi abbiamo bisogno di streaming e
la performance deve essere molto migliore
sai ancora una volta andava bene al
all’inizio quando le cose erano rozze a
gettare più hardware al problema che noi
tutti vogliono dire il potere che tutti vogliamo
ottimizzare le risorse quindi abbiamo bisogno di meglio
performance ed è lì che arriva la scintilla
in questo circa due anni fa TWEN
13 Cloudera il grande venditore di Hadoop ha detto
sai che abbiamo raggiunto un punto
dove MapReduce è andato davvero lontano
come possiamo prendere questo strumento scintilla ha
prima incubavo per un po ‘
Berkeley e poi è una fonte aperta
Il progetto Apache pensiamo che sia un po ‘
il futuro per ciò che il motore di calcolo
sotto tutto dovrebbe essere dentro
Hadoop quindi l’hanno abbracciato e specie
mettilo su una nave spaziale ora è forse
il progetto open source più attivo in
il mondo credo che sia decisamente acceso
github e apache ma sai forse no
per Linux o paragonato a Linux o
qualcosa così che cosa ci dà bene
questo vedrà in un minuto che dà
noi ap molto conciso è quello di esporre il
tipo di astrazioni di cui abbiamo bisogno
comporre i flussi di dati, indipendentemente dal fatto che siano
sorta di sequel tradizionale e non c’è
anche un dialetto sequel è possibile utilizzare per
questo che vedremo o voglio fare
qualcosa che è forse non banale come
un processo ETL in cui ho intenzione di fare
varie stadiazione e convalida e
trasformazione e splitting flussi e
così via il genere di cose che tu
non penserei davvero di fare con a
sequel query così tanto e in realtà
il supporto per AP è adesso l’r r1 è
in realtà in arrivo in una versione futura ma
è fondamentalmente pronto ma cranio di pitone
e Java lo ha reso possibile
in effetti un recente cambiamento nell’API
finalmente reso possibile il Python
codice per essere veloce come il teschio e
Codice Java quindi non è più completamente
necessario per i ragazzi della scienza dei dati
buttare il loro codice sul muro solo alcuni
ingegneri per portarlo su java o scala
ora ovviamente c’è sempre il
soliti problemi di distribuzione di qualcosa
alla produzione sai provarlo prima
arriva lì il solito software
sfide di ingegneria che tutti conosciamo
dobbiamo sapere l’indirizzo, quindi non lo so
voglio minimizzare questo tipo di aspetti
ma non è più necessario semplicemente
portare le cose a ciò che è percepito
come il linguaggio dei sistemi reali piace
era ed effettivamente ha un seguito
dialetto così possiamo effettivamente scrivere sequel
interroga anche in modo interattivo quando è così
il modo giusto per lavorare con i dati così
abbiamo questa shell interattiva è
fondamentalmente la scala shell e dà
noi non ci dà java ma possiamo
scrivi in ​​queste tre lingue e noi
può anche scrivere query sequel di fatto
l’esempio è mostrato un po ‘
beb sequel query in scala maggiore
programma ma c’è anche una variante di
la shell che fa apparire solo un sequel
ti chiede solo di scrivere query sequel
come faresti con un alveare o qualcuno dei
strumenti di database che hai mai usato
che è davvero molto buono per me
persino lavorato alle persone del product manager
che non sono affatto tecnici
come scrivere query sequel perché
hanno appena imparato come farlo
parte dei loro posti di lavoro e consentendo loro
gente che si collega al tuo Hadoop
Il cluster e scrivere query sequel è
piuttosto potente e farlo ragionevolmente
buona velocità, non la bassa velocità
MapReduce ti ha obbligato con l’alveare e
a causa di questi primitivi componibili
che ho menzionato è davvero facile
implementare un’ampia classe di algoritmi e
hai ottenuto la buona prestazione di recente così
puoi fare anche algoritmi iterativi
come gli attraversamenti grafici come l’allenamento a
modello di machine learning e quel tipo di
cosa era che questi erano molto
difficile da fare con MapReduce e tu avresti
per aggirare il sistema o
tollerare scarse prestazioni ma ora possiamo
fallo molto meglio un altro davvero
cose interessanti fanno MapReduce
mai in realtà sapevo cosa fosse il lungo
sequenza di lavori erano quelli che hai scritto
stiamo cercando di realizzare ciò che aveva
nessuna visibilità nella pipeline è solo
conosceva il passo della mappa e il passo ridotto
quello potrebbe dire che tu sai in qualcuno di
questa sorta di passaggi a grana grossa qui
la scintilla in realtà costruisce un pigro diretto
grafico aciclico del calcolo e lui
puoi fare cose come sai schiacciare un po ‘
di loro insieme nello stesso processo di jvm
così puoi concettualmente giusto le cose
separatamente ma otterrebbe l’ottimizzazione
di avere cose arrotolate insieme
beneficia anche il recupero dei dati così dentro
Infatti se si perde come una partizione di
la scintilla dei dati può tornare ovunque
l’ultimo punto di controllo o l’origine dei dati era e
ricostruire quella partizione perché
capisce il lignaggio di tutti i dati
perché ha questo aciclico diretto
grafico in memoria e ho effettivamente menzionato
questo già c’è un nuovo frame di dati
API ispirata a Python e alla nostra
concetti di frame di dati che AB tarda a – ‘s
il livello di astrazione anche un po ‘
più lontano del nucleo della scintilla ma anche
abilita le ottimizzazioni di query e il
capacità di usare
una di queste quattro lingue che ho menzionato
tra cui in realtà cinque compreso il sequel
e ancora ottenere la stessa prestazione che
penso sia un enorme passo avanti e
per la sua capacità di essere equo
una scintilla efficiente può effettivamente supportare a
modello di streaming che è fondamentalmente a
mini modello di lotto quindi scintilla in realtà
evoluto anche come un sistema in modalità batch come
mapreduce sai che è stato avviato
per il 2008-2009 ma per il suo
l’efficienza relativa l’hanno capito
potrebbero effettivamente supportare una sorta di
8020 soluzione a ciò che la maggior parte della gente intende
quando significano veramente lo streaming che è
Ho solo bisogno di elaborare i dati in modo equo
rapidamente non deve essere perfetto o
lo sai istantaneo come millisecondi
come il mio esempio di indice invertito dove
sì, non devo rispondere a un utente
immediatamente sai quando è l’indice
aggiornato ma sicuro sarebbe bello se io
potrebbe farlo entro un minuto o qualsiasi altra cosa
così hanno inventato questo processo mini-batch
chiamato in realtà ho un po ‘di
la prossima diapositiva lo mostrerà un po ‘ a
altri importanti benefici sebbene uno sia
questo perché è un mini gruppo tu
in realtà può solo riutilizzare lo stesso
codice che hai scritto per i tuoi lavori batch
all’interno di un sistema di elaborazione del flusso e se
hai mai usato l’architettura lambda per
esempio questo risolve davvero un enorme
problema che è tipico del lambda
architettura che è in altri strumenti voi
spesso ti ritrovi a implementare il
stessa logica due volte una volta nel tuo streaming
strumento come la tempesta diciamo e guardiamo dentro
il tuo badge ti piace mappare così ora
non hanno a che fare che anche si può solo
scrivi un codice base e poi
lo riutilizzerai per quei due
diversi scenari e in aggiunta a
riutilizzando il codice batch ottieni l’abilità
fare le funzioni della finestra così
concettualmente sembra qualcosa di simile
questo ognuno di questi riquadri blu è un
resiliente set di dati distribuito che è
la collezione distribuita che c’è dietro
le scene tenendo sempre i dati E ‘
resiliente nel senso che se a
la partizione è persa come ho detto che può andare
indietro e ricostruirlo è distribuito
e che i dati saranno partizionati
attraverso il tuo cluster in modo da ottenere il
benefici del parallelismo e nel caso
di un processo di streaming che usano
qualcosa chiamato stream discretizzato o
D flusso in cui ogni finestra temporale e
è qualcosa che specifichi di sapere
a circa un secondo è il minimo
risoluzione sta per mettere quel gruppo
di dati in un RDD e consentono di elaborare
su di esso o anche fare cose su Windows di
così se sei come il computer in movimento
medie o sai quali sono più
tweets frequenti o qualsiasi altra cosa tu possa fare
in questo modo va bene ora ho intenzione di mostrare
qualche codice Scala, anche se si tratta di dati
la scienza parla e io userò questo
la mia fonte sai per il permesso di
fai questo Vitaly Gordon questo in realtà è un
link a un discorso che ha dato a giorni scala ma
era conveniente che avesse parlato prima
egli elfin fautrice usando scala e
specialmente in questa sorta di pre-scintilla 13
modalità in cui non hai avuto l’abilità
per eseguire Python con le stesse prestazioni di
Codice Java quindi userò solo capesante e
soprattutto perché è l’unica cosa che io
so come fare più quindi, per favore
effettivamente guardare l’indice invertito e
sai che presumo che tu non lo sappia
Scala di quanti ne hai effettivamente usati
Scala appena fuori dalla cura va bene ancora
di quanto pensassi lo scopo non è davvero
ti ha insegnato il cranio, naturalmente, ma a
vi darà un senso di che cosa vuol dire
creare un flusso di dati di elaborazione dei dati in
un linguaggio che o toolkit che dà
hai le giuste astrazioni funzionali
vale a dire gli operatori di dati immutabili che stringa
insieme per andare da A a B con te
facendo tutti i piccoli micro passi che io
è necessario rendere l’API Python quasi
identico è incredibile come simile
Il codice Python guarda a questo, infatti, lo farò
mostra un esempio di ciò in un secondo il
Il codice Java non è abbastanza conciso ma ora
a causa di Java 8 puoi fare cose come
incorporare funzioni anonime che è molto
comunque importante per la concisione del codice
si inizia sempre con cose importanti
se sia java o scala la stessa idea
e poi lo studioso ti lascia dichiarare
oggetti singleton e questo è quello che tu
metterebbe le tue routine principali in questo modo
questo è quello che sto facendo qui per calcolare
l’indice invertito ovviamente è mio
punto di ingresso quando questa cosa ti corre
inizia sempre un programma spark creando
un contesto di scintilla che è il tuo punto di ingresso
il primo argomento in realtà è il
cluster con cui sto parlando in questo caso sono
solo parlando con il mio portatile, quindi è solo
modalità locale e c’è che c’è molto
vari modi per costruirli
cose, ma ora cerchiamo di iniziare effettivamente
elaborare questi dati quindi la prima cosa
Ho intenzione di fare è dare per scontato che il mio kraal
i dati sono solo nei file di testo, quindi vado
per caricare quello e di nuovo in realtà questo
potrebbe essere una directory di sai
terabyte di dati ma io ma lo farò
capire quanti compiti generare per
io e la prima cosa che voglio fare e
siamo un po ‘isolati alla vasca
ma penso che tu possa ancora vederlo
andando a mappare su ogni riga e così via
è una funzione anonima a cui sto passando
il metodo mappa e puoi usare ricci
parentesi invece di parentesi per
argomenti della funzione perché ti dà
questa è una bella struttura a blocchi e anche
in realtà mentre penso che preavviso
i loro punti all’inizio di questi rossi
cose le cose rosse sono sempre metodi
perché questo è il vero lavoro
in realtà una gigantesca espressione dove sono
solo costruendo un oleodotto che potresti
certamente hanno variabili intermedie
per ciascuna di queste fasi, ma quando sono
facendolo tutto in una volta tu lo sai
non mi piace dichiarare variabili dove io
Devo inventare un nome comunque
Ho intenzione di dividere la linea su schede e
quindi restituire una tupla contenente il primo
elemento nel secondo elemento che sono
in realtà dividendo in due elementi
questo è quello che i due sono quattro perché un
ovviamente il testo potrebbe avere schede in esso
non voglio trattare quelli come campi così
questo è ora ho un paio di mio
ID documento e il contenuto del mio
documenta un record per riga piatta
la mappa è fondamentalmente come una mappa ma al posto di
essendo uno a uno le sue 02 molte uscite a
sentire quello che sto facendo è prendere ogni riga
e dividere il testo in parole e
quindi emettendo un’altra tupple che
sarà la parola che ora ho messo in a
posizione chiave per impostazione predefinita utilizza il
il primo campo è la chiave e quindi il percorso
perché ho bisogno di tenere traccia di dove
questa parola è stata trovata ed è che sto usando
mappa piatta perché ovviamente ne otterrò molti
di questi per riga e mappa piatta sarà solo
comprimi automaticamente quello annidato
raccolta di parole per documento in
un gigante una collezione di percorsi di parole
coppie è ovviamente quello che vogliamo questo
è il mio pezzettino di codice preferito questo
è una specie di classico linguaggio scintilla per
contando che sto prendendo quelle tuple e lo sono
andando da te usi ancora la parola e il percorso
toppa come una chiave in modo che sia annidata
all’interno di un più grande tupple che ha un seme
conteggio di uno per ogni tupla e poi il
il prossimo passo che abbiamo ridotto per chiave è
è un’ottimizzazione e scintilla dove sarà
semplicemente è fondamentalmente raggruppato da sopra tutto
di quelle parole del percorso di parole e poi solo
riassume i conteggi con qualsiasi funzione
Lo passo, quindi vado a prendere il
due conti n1 e n2 li sommano e
Finirò con dati come in quel grigio
box dove ora avrò un percorso di parole unico
coppie e poi alcuni contano che è uno o
più per ogni parola fa tutto questo
è riorganizzare la stampa sai cosa
Amo di questa linea questo sarebbe
essere come un brutto lavoro sarebbe come lo sai
cinque o sei o dieci righe di codice Java
tutto quello che voglio fare è tornare a usare
la parola è la chiave, quindi mi sono appena spostato
la parentesi di queste tuple nel
tuple annidate in modo che ora ho la parola è
la chiave e poi il percorso e conta come il
valore ed è per questo che mi piace tanto
questo è il motivo per cui il caso parola è qui
questo è in realtà un idioma di pattern matching
e Scala mi permette di entrare e di strapparmi
il bancone a parte solo senza dover
sai come chiamare ottenere ottenere elemento
elemento tipo di cose quindi sono il modello
corrispondenza su quel percorso parola nidificato
accoppiare la chiave originale e contare e
quindi creando un nuovo tempio con la parola
è la chiave e quindi il percorso e un questo il
conta come il valore di questo del tempio
ora facciamo un gruppo tradizionale x sopra il
chiave e poi questo ultimo bit tutto ciò che è
fare davvero è la formattazione dell’output
e al volo ordinamento per conteggio
scendendo così è quello che siamo è il suo
ordinare per e poi ho un altro modello
abbinare tutto ciò che sto facendo è dire tutto
proprio quando stai facendo questo ordinamento
trattare il conteggio è negativo, quindi lo farà
in realtà essere discendente e fare a
la spada secondaria sul sentiero in realtà no
necessario ma è utile per l’unità
test e poi farò solo una stringa
fuori da quelli e quindi salvare tutto questo
a un file di testo e poi fermarsi quando siamo
fatto tutto tranne che fermarsi al
in basso e l’ input iniziale attraverso
file di testo potrei prendere quel codice metterlo
in una biblioteca e farlo in gruppo o
streaming al volo se volessi così io
ottenere quel riutilizzo, quindi lo sai
se hai capito tutti quei dettagli
Spero tu abbia capito come funziona l’AP
e AP I che espone il giusto
astrazioni in questo caso lo sai
design
perché i dati lo lasciano davvero alla grande
rapidamente ho scritto questo in 30 minuti il
la prima volta che ho scritto questa cosa ora è così
molto evoluto da allora ma era perché io
capito quelle astrazioni e io
non pensavo davvero veramente basso
dettagli grintosi di livello che MapReduce
avrebbe costretto su di me e ho potuto
manovrarlo velocemente e questo è un 12
punta il font credo che tu possa effettivamente farlo
quasi a leggere il tutto forse quelli
di te in prima fila va bene una volta
ancora una volta fantastico Combinator è una specie
di un termine di programmazione funzionale sono uno
di quei tizi di alto livello che hanno il cappello a cilindro
comunque gli operatori sono davvero una parola migliore
ma è per questo che io uso il rosso, anche se
sbiadisce su questo proiettore
perché quelli stanno facendo il vero lavoro
quelli sono i sollevatori pesanti e io solo
dì loro che sai ok quando riduci
tramite la riduzione della chiave quando sei
la mappatura va bene come voglio
mappare queste tuple e così via, quindi facciamolo
guarda l’aspetto leggermente più ampio di
l’ecosistema scintilla come un sub ecosistema
di Hadoop o puoi effettivamente lanciare una scintilla
fuori da Hadoop può essere così dolorante
una spina spudorata del gruppo autonomo
typesafe offre supporto commerciale
per queste ultime due opzioni quindi parla
io dopo se vuoi darmi
il tuo denaro va bene possiamo scrivere sequel
domande quindi diamo un’occhiata a quella prima di
tutto molto importante per molte persone
hanno nell’ecosistema Hadoop amatoriale
Ho già un sacco di cose nell’alveare
hanno usato i tavoli dell’alveare per sempre
scintilla e interagisci con l’alveare così tu
puoi ottenere query più veloci o puoi farlo
esempio preferito di questo in realtà sei tu
scintilla per quella pulizia etl sai
processo di sgranocchiare e quindi basta scrivere
tabelle dell’alveare e quindi i tuoi analisti di dati
lo sai non appena quel processo è
finito possono andare proprio lì domande
per farti vedere quali sono gli ultimi tweet
o qualunque cosa abbia una query interna
ottimizzatore chiamato catalizzatore e così via
fondamentalmente le ultime due linee che hai
due opzioni che puoi scrivere sia reali
sequel o puoi usare questi nuovi dati
frame API che è una specie di te
conoscere un modello di builder per
esprimere le query in un altro tipo
modo sicuro rispetto alle stringhe incorporate
che in realtà è il modo preferito
oggi quindi vediamo un esempio
di come potresti usare questo con alto
e se volessi usare le scintille proprio
sequel dialetto il codice sarebbe quasi
lo stesso ma non è altrettanto maturo o
come caratteristica completa come la versione alta
quindi questo è ancora molto popolare
ci sono alcune cose che sono state tagliate e
solo una dichiarazione di importazione che non è così
davvero importa creare un contesto scintillante come
prima di avvolgerlo in un contesto alveare o
usa il contesto sequel se non lo faccio se lo sono
non parlare all’alveare e posso fondamentalmente
scrivi lo stesso tipo di domande che abbiamo visto
prima posso creare un tavolo solo io
ho questo metodo sequel e devo farlo
passare stringhe così il lato negativo è che non lo è
digitare controllato fino al runtime, ma questo è
va bene se questo è in realtà un interattivo
mostra dove dirò solo che posso dirlo
subito se ho incasinato e rifarlo
Posso caricare i dati per cui è un classico alto
sto caricando i dati che ho che sai
memorizzato nel mio simile file system locale in
HDFS e poi posso iniziare a scrivere
chiede questo ultimo metodo show è solo un
metodo di frame di dati che è conveniente per
vedendo come i primi 10 dischi e
vedi cosa hai così quando quando io
ha fatto questo, quello che fanno piace è spento
lo schermo in realtà quando faccio questi
le query restituiscono qualcosa chiamato a
cornice dati che ha questo livello superiore
astrazione per lo schema di consapevolezza sequel
consapevolezza dei dati e quindi posso
appena posso effettivamente usare questo nel
regolare scintilla API se voglio prendere il
come i risultati di questa query e fare
alcuni sgranocchiarlo e crearne uno nuovo
tavolo alveare o quant’altro è tutto
come tutto integrato proprio lì e se
non ti piacciono le stringhe di query nidificate
beh, c’è questa alternativa che faremo
vedere in un secondo quindi risulta
in realtà quando si esegue questa operazione sia in
Python o source kala ce n’è di più
il tuo codice sembra sta andando a guardare
davvero simile a tutto ciò che farai in questo
un esempio particolare che ti ho mostrato quale è
anche un cambiamento banale come si sostituisce a
dichiarazione o una dichiarazione l’importazione è
sostituito da una scintilla PI uguale a
importare il contesto di hype e poi basta
elimina le parole chiave Val dalla scintilla
del codice che ti ho appena mostrato
se ce n’erano, immagino ci fossero al
iniziando per il contesto scintilla e poi
il codice è in realtà codice Python così
è davvero bello, lo sai in un certo senso
anche questo è bello perché significa questo
se conosci Python e qualcuno dà
sei un esempio di scala per guardare OH
dove puoi probabilmente capire cosa
sta facendo abbastanza facilmente quindi diamo un’occhiata
in alternativa quali sono i dati
frame API e fondamentalmente farò un po ‘di cose
lo stesso codice questo sarà più tipo
sicuro perché farà il controllo
al momento della compilazione e questo è un vantaggio
lo svantaggio per chiunque sia già
so che il seguito è che devono essere gentili
impara questo dsl al contrario di solo
scrivendo con il linguaggio che già hanno
lo so ma inizia lo stesso sai
creiamo questo scintillio di contesto e questo
tempo ho intenzione di usare il contesto sequel
e non fare con alveare a tutti vado
caricare alcuni dati e per impostazione predefinita utilizza
parte k che è una sorta di piccantezza in
termini di formati dei dati nel file Hadoop
sistema è un archivio orientato alla colonna
in realtà comprime le colonne ne fa un po ‘
altre cose carine che sono piuttosto utili
questo è qualcosa che Twitter ha aiutato
sviluppato in realtà ma puoi caricare
Jason e può analizzare JSON al volo
per te e dedurre lo schema che puoi
certamente uso altri formati di file
che sono popolari, compreso il testo anche
anche se Martin e Todd ci hanno convinto
non usare mai più il testo per il resto di
le nostre vite naturali, quindi forse lo voglio
in realtà il WC dovrebbe essere
come una parola contano i dati o semplicemente pensano
è un indice invertito e forse lo voglio
guarda i conteggi in discesa che voglio vedere
le parole più frequenti I
può solo fare l’ordine dei frame di dati prima e poi
questa piccola sintassi funky con un dollaro
firmare questo è uno dei tanti modi
puoi esprimere voglio che tu trovi il
contare la colonna in questi dati e ordinati
scendendo così è un po ‘ idiomatico
scala che dovevano usare per questo
particolare API ma ci si abitua
veramente veloce e poi posso vedere il primo
dieci molto facilmente solo per assicurarsi che
sembra ragionevole e poi il denaro è un
la scintilla di ottimizzazione si espone a voi per dire
Ho intenzione di andare oltre lo stato
più e più volte così incassare in memoria se
puoi così non solo ricalcolare
l’intero grafico ogni volta altrimenti
sarebbe davvero tornare al e ricaricare
i dati ogni volta che sarà
inefficiente potrei fare cose come te
mostrami tutte le parole che sono più grandi
che sono di nuovo più lunghi di 20 caratteri
usando questa sintassi idiomatica questa volta
Sto passando un predicato è un argomento
filtrare e quindi potrei salvare il
restituisce a parcheggiare se voglio
in realtà inserisco l’estensione solo per
mostra che è parquet ma non è così
importa sta andando a scrivere di default
parque e leggi la parte k lo uso
come una convenzione di denominazione qui così tanto
in realtà credo che non sia abbastanza
come nell’esempio precedente ma se tu
preferisco lavorare in un’API di questo tipo
controllato al momento della compilazione e anche
ti dà davvero buone prestazioni è
è uno strumento eccellente, quindi?
apprendimento automatico e elaborazione grafica
finiamo con quelli e come sto
fare per tempo abbastanza bene ok quindi c’è
un live ml che fa parte della scintilla è un
libreria di standard in rapida crescita
algoritmi di apprendimento automatico ed è
costruito su questa infrastruttura di base
ci dà davvero buone prestazioni per il
in gran parte dal modo in cui ho pensato
qualcosa se vuoi pubblicare domande
pubblicali sull’app e ricorda anche
per rivedere l’app intendevo dirlo
quando ho iniziato guardiamo una specie di
un esempio interessante così ho menzionato
lo streaming è davvero molto bello
cose che facciamo un apprendimento automatico
abbiamo fatto in modalità batch ma
ci sono alcune cose che ci piacerebbe davvero
fare in tempo reale e io uso la parola
tempo reale con citazioni aeree naturalmente e
uno di loro sta trovando cluster e dati
come sta arrivando nell’altro loro
il supporto al momento è logistico e lineare
regressione in modo da poter apprezzare i modelli di treno
al volo e fare previsioni al volo
l’esempio che sto per mostrarti è
in realtà dalla distribuzione della scintilla
stesso così puoi solo scaricare la scintilla
e troverai questo codice lì dentro
ci sono un sacco di importazioni disordinate ma
soprattutto quello che volevo mostrarti è che sono
importando un esempio e ho aletta il
org dot dot Apache qui davanti
non è studioso di giurisprudenza, ma lo faccio e basta
si adatterebbe c’è un po ‘ built-in lineare
roba algebra per come rappresentare
vettori di caratteristiche che conosci come a
l’esempio classico sarebbe come tu sai
Valutazione di Sam come i prezzi delle case che potrei
avere un vettore per il numero di prezzo di
stanze quelle caratteristiche e cosa
altrimenti qui poi etichettato punto se ho
dati che sono già pre etichettati come
parte di un certo cluster o raggruppamento
allora lo userò per testare come
preciso questo è così poi abbiamo fatto
queste importazioni ora ho intenzione di importare a
contesto di streaming quindi faremo
sia l’apprendimento automatico che lo streaming
anche gli involucri penso che devo costruire qui
superiamolo, così ci siamo
Ancora una volta creo una scintilla di contatti
creare un contesto di streaming e ascoltare il
il secondo argomento è importante che mi dice
quante volte sai cosa è il
lunghezza in qualche finestra temporale che voglio
per acquisire i dati e elaborarli come un mini
lotto per vari motivi tecnici che
non entreremo in questo tipo di minimo
è davvero un secondo che non vuoi
entrare non puoi davvero andare al di sotto di quello
e avere prestazioni affidabili che puoi fare
fino a tempi davvero lunghi se vuoi
se si dispone di streaming e dati molto lenti
sai che puoi avere diversi minuti se
vuoi l’unico rischio, ovviamente
è che i dati sta per essere seduto in
memoria e potresti sapere di perderti lì
sono alcuni modi che stanno aggiungendo
resilienza in modo da non ottenere perdite di dati
l’evento in cui il lavoro si verifica in modo anomalo
perché hai dati che sono stati seduti
siamo pronti per la prossima iterazione che siamo
andando a caricare due set di dati uno dei quali
saranno i dati di allenamento che è già
etichettato no non è etichettato, lo vogliamo
vogliamo usare quelli per predire ma
allora avremo una tabella di test
che i dati di test che sono etichettati lo faranno
anche carichiamo e quello che andremo a fare
quando iniziamo effettivamente l’elaborazione è come
i dati arrivano sul flusso di formazione
andiamo al tuo treno o cerchiamo
grappoli che conosci con k-means e poi
prenderemo quei dati e vedremo
quanto bene abbiamo fatto a predire il
posizione di questi set di allenamento in modo che
i dati di addestramento sanno già dove
dovrebbe essere, vedremo quanto vicino
ci siamo riusciti in modo che il file di file txt significhi
stiamo solo per ascoltare su un socket
per i dati che arrivano in sì è corretto
ci sono anche directory che potresti
guarda le directory e così via lo faremo
trattare ogni record sarà come un singolo
linea di testo e quindi questo è un classico
idioma di appena mappare su quei dati e
passandolo a qualche metodo di analisi
sa come tokenize quella linea di testo
e trasformalo in un oggetto come un vettore
in questo caso o un punto etichettato è
anche un vettore ma ha un’etichetta
attaccato ad esso e io amo questo perché
è così conciso da usare davvero
streaming k-significa che basta istanziare
uno e impostiamo alcune proprietà
ora tutte queste cose in giallo lo farebbero
normalmente sono come le opzioni della riga di comando
che puoi variare, ma solo per
la semplicità li ho trattati come costanti
quindi troveremo, per esempio, cinque
grappoli nei dati tutto il tempo il
il fattore di decadimento dice che dovrei ricordare
dati precedenti e mescolare quello in o dovrebbe
Lo dimentico e in fondo è a
ponderazione in questo caso uno in realtà
significa dimenticare tutti i dati precedenti
ogni nuovo lotto come nuovi dati e
trovare i suoi cluster zero significherebbe usare
tutti i dati del passato, che è una specie di
pericoloso perché ovviamente stai andando
per accumulare dati e poi noi
bisogno di inizializzare i centri e lo siamo
assumendo che le caratteristiche finali siano
in realtà la dimensione dei nostri vettori così noi
diciamo che sappiamo che ne abbiamo 20
caratteristiche dei nostri vettori che stiamo andando
fare previsioni con questo è un
funzione in Scala per la semplice trasformazione
un punto etichettato in a uppal che ha
l’etichetta come il primo elemento e il
il resto delle caratteristiche in un vettore è il
il secondo elemento ne ho bisogno per davvero
bene una delle prossime funzioni qui così
questo è il modo in cui potresti dichiarare un
funzione anonima o effettivamente un nome
la funzione in Scala sarebbe simile in
come Python e Java ora anche adesso
tutto ciò che ho fatto fino a questo punto in
fatto anche a questo punto niente
sto davvero succedendo sto costruendo un
pipeline e non è fino al prossimo
allineare su questo quando dico start that will
effettivamente corro così come ho detto che sto per
ho questi due flussi che entrano in me
andando a formare i dati di allenamento su
ogni iterazione batch e quindi prevedere
da quei dati usando ciò che è venuto fuori
i dati di test con la mia funzione f
può estrarre i campi che io
bisogno e Prentiss è davvero davvero un
dichiarazione di debug che hanno nel
API ti mostrerà come i primi 20
i risultati di questo hanno reso rdd un resiliente
distribuire set di dati così normalmente voi
non vedrei che in produzione saresti
scrivendo questo a un file o un database
o qualcosa e poi finalmente iniziamo
e poi aspettalo solo per
terminare che potrebbe essere per sempre
spero che vada bene l’ultimo che voglio
parlare e poi concluderemo è
elaborazione grafica quindi questa è l’idea e
c’è un’API chiamata grafica bene
ce n’è un sacco in questo
mondo reale
Vitaly ha parlato di alcuni in realtà a
LinkedIn il tuo social network
Le epidemie dei seguaci di Twitter sono un
caso interessante l’interwebs che formano
un grafico che non ho sbagliato a fare veramente
ma era quel grafico distribuito
l’elaborazione era in realtà una sorta di a
problema di ricerca e non sapevamo come
per farlo bene, la maggior parte delle persone si limita a ordinare
di versioni specializzate codificate a mano di
qualunque algoritmo stessero tentando di
calcolare usando MapReduce o qualsiasi altra cosa
ora abbiamo davvero la capacità di
costruire motori grafici più generici
che può essere distribuito in questo caso
sono costruiti in cima alla scintilla rapidamente
Troverò il codice molto di ciò che è
appena istituito, ma volevo volerlo
darti un esempio completo per te
sapere la prima cosa è un mucchio di
importa ancora e lo farò no
dico anche di più su quello che voglio
fai di nuovo 20 partizioni di qualcosa io
farebbe davvero un’opzione di configurazione
ci sono molti modi in cui posso partizionare
i dati effettivamente in questo caso siamo
andando a duplicare effettivamente alcuni dei
vertici ogni volta che un bordo sta per
attraversare una partizione penso di averlo capito
proprio in realtà vogliamo che i vertici siano
raggruppati insieme più di bordi così
in realtà duplicheremo i vertici
invece di dividere i bordi, questo è
questo particolare modello e questi due successivi
due valori troppo veloci questi due successivi
sono come provare a salvare tutto dentro
memorie o elaborazione e poi il
tolleranza che in realtà faremo
il page rank è che non l’ho detto veramente
eppure andiamo ai page rank quando noi
iterare sul calcolo dei pesi dei nostri
nodi nel nostro sapere grafico sociale o
qualunque cosa aspetteremo fino a quando non avremo un
tolleranza fino a punto zero zero
e quella sarà la fine dell’iterazione
quindi correrai al completamento
questa tolleranza e poi da qualche parte siamo
andando a prendere i dati che saranno nostri
input okay, questa è la vera carne di
ancora una volta scintilla il contesto a crearlo
utilizzare un file elenco bordo metodo statico dove
gli diamo il contesto di scintilla come nostro input
e poi quegli altri valori che abbiamo appena impostato
che dice ora quante partizioni
e così via e poi incassare
la memoria è l’ultimo passo qui
in realtà il primo passo qui sarà
forniscici i dati del grafico non partizionati una volta
ancora una volta Sono la creazione di una pipeline I
non ho ancora fatto niente
questa piega a sinistra sarà usata per prenderlo
dati non partizionati e partizionamento di
il partizionatore che ho detto di usare
da qualche parte in realtà dove ho detto
comunque è da qualche parte qui dentro, forse io
lasciato fuori e poi l’ultima cosa
faremo in realtà è stampare quanti
nodi e bordi che abbiamo in questo grafico
e quindi finalmente possiamo solo eseguire la pagina
classifica con una riga di codice cache
vertici perché stiamo andando a mantenere
scavalcando questi ultimi passaggi nel giusto
calcola il punteggio totale che riassume tutto
dei ranghi dei singoli nodi
qui solo un po ‘di ismo di Scala
e poi finalmente possiamo solo salvare
questo come dati delimitati da tabulazione su txt
file e poi fermarsi così ancora una volta
in realtà la maggior parte di questo è l’installazione e
teardown che c’è solo come forse 10
linee di codice fanno tutto il vero lavoro
e il resto di questo è come
configurazione e input e output I
penso che sia il mio ultimo esempio, è io
voglio parlare di un paio di altre cose
che dovresti guardare se sei un dato
uno scienziato ne avrà uno
Talk on credo che sia il prossimo
in realtà non si parlerà di
h2o che è davvero sorprendente in memoria
motore di calcolo in cui una scintilla può gestire
non solo nella memoria ma anche nei dati
deve essere scaricato su disco quanti di
hai guardato il linguaggio julia da
possibilità così a Julia come una sorta di aspira a
sostituisci il nostro è un relativamente nuovo
ma è in rapida evoluzione è davvero
linguaggio elegante che potresti voler controllare
fuori così abbiamo forse cinque minuti per
domande

Please follow and like us: