Mis on Spark Shelli käsud?
Spark-kest on liides, mida kasutatakse adhoc-päringute kirjutamiseks, et töötada ja Apache Sparki käitumist mõista. Seda nimetatakse klastrite arvutamise avatud lähtekoodiga mootoriks, mis suudab mälusiseseid andmeid töödelda, näiteks analüütika, ETL, tohutute andmekogumite masinõppimine. Selles teemas õpime tundma Spark Shelli käske.
Erinevate programmeerimiskeelte jaoks on olemas eri tüüpi Spark-kestad:
- säde-kest on kirjutatud Scalas
- pyspark on Pythonis ja
- sparkR R-keele jaoks
Sparki abil saab välja töötada oma eraldiseisva rakenduse. Seda kasutatakse laialdaselt ülikiire arvutuskiiruse tõttu. Selle põhjuseks on asjaolu, et see kasutab MapReduce mitmesuguste päringute ja teisenduste töötlemiseks.
Spark-shell-käskude käitamiseks on Java ja Scala juba süsteemis installitud.
Spark Shell-käskude tüübid
Spark-shell-käskude erinevad tüübid on järgmised:
1. Kontrollimaks, kas säde on installitud, ja selle versiooni teada saamiseks kasutatakse alltoodud käsku (kõik järgmised käsud tuleb näidata selle sümboliga “$”)
$ säde-kest
Kui säde on paigaldatud, kuvatakse järgmine väljund:
$ säde-kest
SPARK_MAJOR_VERSION on seatud väärtusele 2, kasutades funktsiooni Spark2
Logi vaiketaseme seadmine väärtusele „WARN”.
Logimistaseme kohandamiseks kasutage sc.setLogLevel (newLevel). SparkR-i jaoks kasutage setLogLevel (newLevel).
Spark-konteksti veebi kasutajaliides on saadaval aadressil http://10.113.59.34:4040
Sädeikontekst on saadaval kui „sc” (master = kohalik (*), rakenduse id = kohalik-1568732886588).
Sädemeseanss on saadaval kui säde.
Tere tulemast
____ __
/ __ / __ ___ _____ / / __
_ \ \ / _ \ / _ `/ __ / '_ /
/ ___ / .__ / \ _, _ / _ / / _ / \ _ \ versioon 2.2.0.2.6.3.0-235
/ _ /
Scala versiooni 2.11.8 kasutamine (Java HotSpot (TM) 64-bitise serveri VM, Java 1.8.0_112)
Tippige avaldisi, et neid hinnata.
Tüüp: lisateabe saamiseks abi.
skala>
2. Sparki põhiandmestruktuuri nimetatakse RDD-ks (Resilient Distributed Datasets), mis sisaldab objektide muutumatut kogumit dokumentide hajutatud arvutamiseks. Kõik RDD andmestikud jaotatakse loogiliselt klastri mitme sõlme vahel.
RDD-d saab luua ainult kohalikust failisüsteemist lugedes või olemasolevat RDD-d muutes.
a) Uue RDD loomiseks kasutame järgmist käsku:
scala> val examplefile = sc.textFile("file.txt")
Sc nimetatakse SparkContext objektiks.
Väljund:
examplefile: org.apache.spark.rdd.RDD(String) = file.txt MapPartitionsRDD(3) at textFile at :24
b) RDD saab paralleelse kogumise kaudu luua järgmiselt:
scala> val oddnum = Array(1, 3, 5, 7, 9)
Väljund:
oddnum: Array(Int) = Array(1, 3, 5, 7, 9)
scala> val value = sc.parallelize(oddnum)
Väljund:
value: org.apache.spark.rdd.RDD(Int) = ParallelCollectionRDD(4) at parallelize at :26
c) Looge olemasolevatest RDD-dest :
scala> val newRDD = oddnum.map(value => (value * 2))
Väljund:
newRDD: Array(Int) = Array(2, 6, 10, 14, 18)
3. Spark RDD toiminguid on kahte tüüpi, mida saab loodud andmekogudega teostada:
- Tegevused
- Muundumised
Toimingud: seda kasutatakse olemasolevate andmekogumite teatud nõutavate toimingute tegemiseks. Järgnevalt on toodud mõned käsud, mida saab kasutada loodud andmestike allpool toodud toimingute tegemiseks:
a) funktsioon count () RDD elementide arvu loendamiseks:
scala> value.count()
Väljund:
res3: Long = 5
b) funktsioon koguda () massiivi kõigi elementide kuvamiseks:
scala> value.collect()
Väljund:
res5: Array(Int) = Array(1, 3, 5, 7, 9)
c) esimene () funktsioon, mida kasutatakse andmestiku esimese elemendi kuvamiseks:
scala> value.first()
Väljund:
res4: Int = 1
d) funktsioon take (n) kuvab massiivi esimesed n elementi:
scala> value.take(3)
Väljund:
res6: Array(Int) = Array(1, 3, 5)
e) funktsioon takeSample (withReplacement, num, (seed)) kuvab num numelementide juhusliku massiivi, kus seeme on juhuslike arvude generaatori jaoks.
scala> value.takeSample(false, 3, System.nanoTime.toInt)
Väljund:
res8: Array(Int) = Array(3, 1, 7)
f) saveAsTextFile (tee) funktsioon salvestab andmestiku hdfs-i asukoha kindlaksmääratud teele
scala> value.saveAsTextFile("/user/valuedir")
g) vaheseinad. pikkuse funktsiooni saab kasutada RDD-s partitsioonide arvu leidmiseks
scala> value.partitions.length
Väljund:
res1: Int = 8
RDD teisendused
Ümberkujundamist kasutatakse uue RDD moodustamiseks olemasolevatest. Kuna RDD sisendid on muutumatud, võib muundamisel saadud tulemus väljundina olla üks või mitu RDD.
Transformatsioone on kahte tüüpi:
- Kitsad transformatsioonid
- Laiad teisendused
Kitsad teisendused - iga vanema RDD jaguneb erinevateks partitsioonideks ja nende hulgas kasutab lapse alane RDD ainult ühte partitsiooni.
Näide: map () ja filter () on kaks peamist põhitransformatsiooni tüüpi, mida kutsutakse toimingu kutsumisel.
- Kaardifunktsioon (func) töötab väljundi RDD saamiseks iteratiivselt kõigil andmestiku „väärtus” elementidel.
Näide: Selles näites lisame andmestiku väärtuse igale elemendile väärtuse 10 ja kuvame teisendatud väljundi kogumisfunktsiooni abil.
scala> val mapfunc = value.map(x => x+10)
mapfunc: org.apache.spark.rdd.RDD(Int) = MapPartitionsRDD(3) at map at :28
scala> mapfunc.collect
res2: Array(Int) = Array(11, 13, 15, 17, 19)
funktsiooni filter (func) kasutatakse põhimõtteliselt funktsiooni abil täpsustatud tingimusele vastavate elementide filtreerimiseks.
Näide: Selles näites proovime hankida kõik elemendid, välja arvatud andmestiku “väärtus” number 2, ja väljundi toomine kogumisfunktsiooni kaudu.
scala> val fill = value.filter(x => x!=2)
fill: org.apache.spark.rdd.RDD(Int) = MapPartitionsRDD(7) at filter at :28
scala> fill.collect
res8: Array(Int) = Array(4, 6, 8, 10)
Lai teisendused - üksikvanemate RDD sektsiooni jagatakse mitmetel mitme lapse RDD sektsioonidel.
Näide: grupiklahv ja taandeklahv on näited laiadest teisendustest.
- funktsioon groupbyKey grupeerib andmestiku väärtused võtme-väärtuse paaridesse vastavalt teise RDD võtmeväärtustele. See protsess hõlmab jaotust, mis toimub siis, kui funktsioonide grupp kogub konkreetse võtmega seotud andmeid ja salvestab need ühte võtme ja väärtuse paari.
Näide: Selles näites määrame stringi väärtusele “key” täisarvud 5, 6 ja “8” -le täisarvu 8, mis kuvatakse väljundis samas võtme-väärtuse paari vormingus.
scala> val data = spark.sparkContext.parallelize(Array(("key", 5), ("val", 8), ("key", 6)), 3)
data: org.apache.spark.rdd.RDD((String, Int)) = ParallelCollectionRDD(13) at parallelize at :23
scala> val group = data.groupByKey().collect()
group: Array((String, Iterable(Int))) = Array((key, CompactBuffer(5, 6)), (val, CompactBuffer(8)))
scala> group.foreach(println)
(key, CompactBuffer(5, 6))
(val, CompactBuffer(8))
- Reduktsiooni funktsioon ReduByKey ühendab ka võtme-väärtuse paarid erinevatest RDDdest. See ühendab võtmed ja nende vastavad väärtused üheks elemendiks pärast nimetatud teisenduse tegemist.
Näide: Selles näites paralleeritakse funktsiooni abil massiivi "tähed" tavalised võtmed ja iga täht kaardistatakse arvuga 10. RedutseerijaByKey lisab sarnaste võtmetega väärtused ja salvestab muutuja väärtus2. Seejärel kuvatakse väljund kogumisfunktsiooni abil.
scala> val letters = Array("A", "B", "C", "D", "B", "C", "E", "D")
letters: Array(String) = Array(A, B, C, D, B, C, E, D)
scala> val value2 = spark.sparkContext.parallelize(letters).map(w => (w, 10)).reduceByKey(_+_)
value2: org.apache.spark.rdd.RDD((String, Int)) = ShuffledRDD(20) at reduceByKey at :25
scala> value2.foreach(println)
(C, 20)
(E, 10)
(D, 20)
(B, 20)
(A, 10)
Koos ülalnimetatud toimingutega, näiteks eraldamine RDD-ga ja nende abil toimingute / teisenduste tegemine, toetab Spark ka vahemällu salvestamist, millest on abi siis, kui samu andmeid kutsutakse rekursiivselt.
Kõigi nende omaduste abil saab Apache Spark töödelda tohutul hulgal andmeid ning teostada pakkide töötlemist ja voogesituse töötlemist. Sparki tehtud mälusisene arvutus vastutab rakenduste eriti kiire töötlemise eest. Seetõttu on Spark lähenemisviis, kuna sellel on eri keeltes programmeerimise mitmekülgsus, kasutusmugavus ja integreerimisvõimalused.
Soovitatavad artiklid
See on Spark Shelli käskude juhend. Siin käsitleme Spark Shell-käskude erinevaid tüüpe erinevate programmeerimiskeelte jaoks. Lisateabe saamiseks võite vaadata ka järgmist artiklit -
- Koore skriptimise käsud
- Kuidas installida säde
- Spark Intervjuu küsimused
- Sädeme käsud
- Adhoci testimine
- Juhuslike arvude generaator JavaScriptis
- Unixi kesta käskude loendi juhend
- PySpark SQL | PySpark SQL moodulid ja meetodid
- Loopi jaoks skriptis | Kuidas silmus töötab?
- Pakkkriptide käsud koos näidetega
- Spark-komponentide täielik ülevaade