Obsah
Spark
- systém pro distribuované výpočty na clusteru
- vylepšení původního map-reduce, o 2 řády rychlejší
- zpracování v paměti – méně I/O operací, vhodné pro iterativní algoritmy nebo analýzu dat
- optimalizace operací před zpracováním
- nyní i pseudo-SQL příkazy
- API pro Scalu, Javu, Python a R
- s Hadoopem (využívá HDFS, YARN) i samostatně
Vhodné úlohy
- dostatečně velké, ale ne extrémně
- dobře paralelizovatelné
- iterační
Nevhodné úlohy
- příliš malé
- s extrémními požadavky na paměť
- šité na míru jiné technologii (SQL, Java)
- špatně paralelizovatelné
- real-time
RDD
- resilient distributed dataset
- kolekce prvků (např. řádky v textovém souboru, datová matice, posloupnost binárních dat)
- nedá se přepsat, vytvoří se nové RDD
- proměnné jsou jen lokální
Akce a transformace
- transformace - nevrací hodnotu - transformace se plánují a optimalizují, ale zatím neprovádějí
- map (prvek → transformační funkce → nový prvek)
- flatMap (prvek → transformační funkce → 0 až N nových prvků)
- filter, distinct (pustí se jen řádky vyhovující podmínce / unikátní)
- join (připojí řádky jiného RDD podle hodnot klíče)
- union, intersection (sjednocení a průnik s jiným RDD)
- groupByKey, reduceByKey (setřídí / agreguje prvky podle klíče)
- akce - lazy evaluation: až první akce spustí celý proces
- reduce (pomocí zadané funkce agreguje všechny prvky RDD)
- take (vypíše prvních n prvků RDD)
- count (počet prvků)
- collect (vypíše RDD jako pole prvků)
- saveAsTextFile (uloží jako textový soubor)
Akce spustí celý řetězec od začátku!
- Všechny mezivýsledky se zapomenou.
- Pokud to nechceme, musíme některé RDD uložit do cache.
Úkol: spočítat četnosti slov v dokumentu
Vstup: textový soubor rozdělený do řádků (RDD)
Postup:
- transformace řádků: řádek → rozdělení na slova → prvky typu (slovo, 1)
- seskupení prvků se stejným klíčem a sečtení jedniček
- Výsledek transformace: RDD s prvky (slovo, četnost)
Data Frame
Datová struktura DataFrame = RDD + sloupcové operace
- obdoba databázové relační tabulky
- obsahuje i schéma
- operace nad rámec RDD – práce se sloupci
- možnost použití syntaxe podobné SQL
Úkol: který stát USA má na meteostanicích nejvyšší průměrný normál v létě?
Vstup: tabulka Hive
Postup:
- načtení dat dotazem do Hive
df=sqlContext.sql('select * from sstamenov.pocasi')
- omezit data na letní měsíce
df2=df.filter((df.mesic>5) & (df.mesic<9))
- ponechat jen důležité sloupce (+ vyhodit null)
df3=df2.select('stat','teplota').na.drop()
- seskupit po státech, spočítat průměry (+ přejmenovat sloupec)
df4=df3.groupBy('stat').avg().toDF('stat','prum')
- seřadit podle průměrů sestupně
df5=df4.sort(df4.prum.desc())
- omezit na první řádek
df5.limit(1)
kj/spark.txt · Poslední úprava: 18.08.2017 16:18 autor: kj