Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— |
kj:spark [18.08.2017 16:18] (aktuální) kj vytvořeno |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== 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 | ||
+ | <file bash>df=sqlContext.sql('select * from sstamenov.pocasi')</file> | ||
+ | * omezit data na letní měsíce | ||
+ | <file bash>df2=df.filter((df.mesic>5) & (df.mesic<9))</file> | ||
+ | * ponechat jen důležité sloupce (+ vyhodit null) | ||
+ | <file bash>df3=df2.select('stat','teplota').na.drop()</file> | ||
+ | * seskupit po státech, spočítat průměry (+ přejmenovat sloupec) | ||
+ | <file bash>df4=df3.groupBy('stat').avg().toDF('stat','prum')</file> | ||
+ | * seřadit podle průměrů sestupně | ||
+ | <file bash>df5=df4.sort(df4.prum.desc())</file> | ||
+ | * omezit na první řádek | ||
+ | <file bash>df5.limit(1)</file> | ||
kj/spark.txt · Poslední úprava: 18.08.2017 16:18 autor: kj