Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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