Апацхе Спарк је најуспешнији софтвер Апацхе Софтваре Фоундатион и дизајниран за брзо рачунарство. Неколико индустрија користи Апацхе Спарк да пронађе своја решења. ПиСпарк СКЛ је модул у Спарк-у који интегрише релациону обраду са Спарк-овим функционалним програмским АПИ-јем. Податке можемо издвојити користећи СКЛ језик упита. Можемо користити упите као и СКЛ језик.
Ако имате основно разумевање РДБМС-а, ПиСпарк СКЛ ће бити лак за коришћење, где можете проширити ограничења традиционалне релационе обраде података. Спарк такође подржава Хиве Куери Лангуаге, али постоје ограничења Хиве базе података. Спарк СКЛ је развијен да уклони недостатке базе података Хиве. Хајде да погледамо следеће недостатке Хиве-а:
Недостаци кошнице
- Не може да настави обраду, што значи да ако извршење не успе усред тока посла, не можете да наставите са места где се заглавило.
- Не можемо испустити шифроване базе података у каскади када је смеће омогућено. То доводи до грешке у извршењу. За избацивање такве врсте базе података, корисници морају да користе опцију Пурге.
- Ад-хоц упити се извршавају помоћу МапРедуце-а, који покреће Хиве, али када анализирамо базу података средње величине, то одлаже перформансе.
- Хиве не подржава операцију ажурирања или брисања.
- Ограничена је на подршку подупита.
Ови недостаци су разлози за развој Апацхе СКЛ-а.
ПиСпарк СКЛ Кратак увод
ПиСпарк подржава интегрисану релациону обраду са Спарк-овим функционалним програмирањем. Пружа подршку за различите изворе података како би се омогућило преплетање СКЛ упита са трансформацијама кода, што резултира веома моћним алатом.
ПиСпарк СКЛ успоставља везу између РДД-а и релационе табеле. Пружа много ближу интеграцију између релационе и процедуралне обраде кроз декларативни Датафраме АПИ, који је интегрисан са Спарк кодом.
Користећи СКЛ, може бити лако доступан већем броју корисника и побољшати оптимизацију за тренутне. Такође подржава широк спектар извора података и алгоритама у Биг-дата.
Карактеристике ПиСпарк СКЛ-а
Карактеристике ПиСпарк СКЛ-а су дате у наставку:
1) Приступ конзистентним подацима
Омогућава доследан приступ подацима значи да СКЛ подржава заједнички начин приступа различитим изворима података као што је Хиве, Авро, Паркет, ЈСОН и ЈДБЦ. Он игра значајну улогу у прихватању свих постојећих корисника у Спарк СКЛ.
2) Инкорпорација са Спарк-ом
ПиСпарк СКЛ упити су интегрисани са Спарк програмима. Можемо користити упите унутар Спарк програма.
Једна од његових највећих предности је та што програмери не морају ручно да управљају неуспехом стања или да држе апликацију синхронизованом са батцх пословима.
3) Стандардно повезивање
Пружа везу преко ЈДБЦ или ОДБЦ, а ова два су индустријски стандарди за повезивање за алате пословне интелигенције.
4) Кориснички дефинисане функције
ПиСпарк СКЛ има комбиновану кориснички дефинисану функцију (УДФ). УДФ се користи за дефинисање нове функције засноване на колонама која проширује речник Спарк СКЛ-овог ДСЛ-а за трансформацију ДатаФраме-а.
5) Компатибилност кошница
ПиСпарк СКЛ покреће неизмењене упите Хиве на тренутне податке. Омогућава пуну компатибилност са тренутним Хиве подацима.
ПиСпарк СКЛ модул
Неке важне класе Спарк СКЛ-а и ДатаФрамес-а су следеће:
Размотрите следећи пример ПиСпарк СКЛ-а.
import findspark findspark.init() import pyspark # only run after findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df = spark.sql('''select 'spark' as hello ''') df.show()
Излаз:
+-----+ |hello| +-----+ |spark| +-----+
Објашњење кода:
У горњи код смо увезли финдспарк модул и позван финдспарк.инит() конструктор; затим смо увезли модул СпаркСессион да креирамо спарк сесију.
из писпарк.скл импорт СпаркСессион
Спарк сесија се може користити за креирање Датасет и ДатаФраме АПИ-ја. СпаркСессион се такође може користити за креирање ДатаФраме-а, регистровање ДатаФраме-а као табеле, извршавање СКЛ-а над табелама, кеширање табеле и читање датотеке паркета.
градитеља класа
То је градитељ Спарк Сессион-а.
гетОрЦреате()
Користи се за добијање постојећег СпаркСессион, или ако не постоји, креирајте нови на основу опција постављених у буилдеру.
Неколико других метода
Неколико метода ПиСпарк СКЛ-а је следеће:
1. име апликације (име)
Користи се за постављање назива апликације, који ће бити приказан у Спарк веб корисничком интерфејсу. Параметар име прихвата назив параметра.
2. цонфиг(кеи=Ништа, вредност = Ништа, цонф = Ништа)
Користи се за подешавање опције конфигурације. Опције подешене овим методом се аутоматски преносе на оба СпаркЦонф и СпаркСессион 'с цонфигуратион.
from pyspark.conf import SparkConfSparkSession.builder.config(conf=SparkConf())
Параметри:
3. мајстор (мајстор)
Подешава главни УРЛ спарк за повезивање, као што је 'лоцал' да се покреће локално, 'лоцал[4]' да се покреће локално са 4 језгра.
Параметри:
4. СпаркСессион.цаталог
цонцат јава стринг
То је интерфејс који корисник може да креира, испусти, измени или упита основну базу података, табеле, функције итд.
5. СпаркСессион.цонф
То је рунтиме конфигурациони интерфејс за Спарк. Ово је интерфејс преко којег корисник може да добије и подеси све Спарк и Хадооп конфигурације које су релевантне за Спарк СКЛ.
цласс писпарк.скл.ДатаФраме
То је дистрибуирана збирка података груписаних у именоване колоне. ДатаФраме је сличан релационој табели у Спарк СКЛ-у, може се креирати коришћењем различитих функција у СКЛЦонтект-у.
student = sqlContext.read.csv('...')
Након креирања оквира података, можемо њиме манипулисати користећи неколико језика специфичних за домен (ДСЛ) који су унапред дефинисане функције ДатаФраме-а. Размотрите следећи пример.
# To create DataFrame using SQLContext student = sqlContext.read.parquet('...') department = sqlContext.read.parquet('...') student.filter(marks > 55).join(department, student.student_Id == department.id) .groupBy(student.name, 'gender').({'name': 'student_Id', 'mark': 'department'})
Хајде да размотримо следећи пример:
Упити помоћу Спарк СКЛ-а
У следећем коду, прво креирамо ДатаФраме и извршавамо СКЛ упите да бисмо преузели податке. Размотрите следећи код:
from pyspark.sql import * #Create DataFrame songdf = spark.read.csv(r'C:UsersDEVANSH SHARMA op50.csv', inferSchema = True, header = True) #Perform SQL queries songdf.select('Genre').show() songdf.filter(songdf['Genre']=='pop').show()
Излаз:
+----------------+ | Genre| +----------------+ | canadian pop| | reggaeton flow| | dance pop| | pop| | dfw rap| | pop| | trap music| | pop| | country rap| | electropop| | reggaeton| | dance pop| | pop| | panamanian pop| |canadian hip hop| | dance pop| | latin| | dfw rap| |canadian hip hop| | escape room| +----------------+ only showing top 20 rows +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_c0| Track.Name| Artist.Name|Genre|Beats.Per.Minute|Energy|Danceability|Loudness..dB..|Liveness|Valence.|Length.|Acousticness..|Speechiness.|Popularity| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 6|I Don't Care (wit...| Ed Sheeran| pop| 102| 68| 80| -5| 9| 84| 220| 9| 4| 84| | 8| How Do You Sleep?| Sam Smith| pop| 111| 68| 48| -5| 8| 35| 202| 15| 9| 90| | 13| Someone You Loved|Lewis Capaldi| pop| 110| 41| 50| -6| 11| 45| 182| 75| 3| 88| | 38|Antisocial (with ...| Ed Sheeran| pop| 152| 82| 72| -5| 36| 91| 162| 13| 5| 87| | 44| Talk| Khalid| pop| 136| 40| 90| -9| 6| 35| 198| 5| 13| 84| | 50|Cross Me (feat. C...| Ed Sheeran| pop| 95| 79| 75| -6| 7| 61| 206| 21| 12| 82| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+
Коришћење функције гроупБи().
Функција гроупБи() прикупља податке сличне категорије.
songdf.groupBy('Genre').count().show()
Излаз:
+----------------+-----+ | Genre|count| +----------------+-----+ | boy band| 1| | electropop| 2| | pop| 7| | brostep| 2| | big room| 1| | pop house| 1| | australian pop| 1| | edm| 3| | r&b en espanol| 1| | dance pop| 8| | reggaeton| 2| | canadian pop| 2| | trap music| 1| | escape room| 1| | reggaeton flow| 2| | panamanian pop| 2| | atl hip hop| 1| | country rap| 2| |canadian hip hop| 3| | dfw rap| 2| +----------------+-----+
дистрибуција (број партиција, * колоне)
Тхе дистрибуција() враћа нови ДатаФраме који је израз за партиционисање. Ова функција прихвата два параметра нумпартитионс и *цол. Тхе нумпартитионс параметар одређује циљни број колона.
song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5)
Излаз:
+---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_c0| Track.Name|Artist.Name| Genre|Beats.Per.Minute|Energy|Danceability|Loudness..dB..|Liveness|Valence.|Length.|Acousticness..|Speechiness.|Popularity| +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 5|Goodbyes (Feat. Y...|Post Malone|dfw rap| 150| 65| 58| -4| 11| 18| 175| 45| 7| 94| | 17| LA CANCI?N| J Balvin| latin| 176| 65| 75| -6| 11| 43| 243| 15| 32| 90| | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 5|Goodbyes (Feat. Y...|Post Malone|dfw rap| 150| 65| 58| -4| 11| 18| 175| 45| 7| 94| +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ only showing top 5 rows