ПиСпарк Пандас_Удф()

Pispark Pandas Udf



Трансформација ПиСпарк ДатаФраме-а је могућа помоћу функције пандас_удф(). То је кориснички дефинисана функција која се примењује на ПиСпарк ДатаФраме са стрелицом. Векторизоване операције можемо извршити помоћу пандас_удф(). Може се имплементирати преношењем ове функције као декоратера. Хајде да заронимо у овај водич да бисмо знали синтаксу, параметре и различите примере.

Тема садржаја:

Ако желите да сазнате више о ПиСпарк ДатаФраме-у и инсталацији модула, прођите кроз ово чланак .







Писпарк.скл.фунцтионс.пандас_удф()

Пандас_удф () је доступан у модулу скл.фунцтионс у ПиСпарк-у који се може увести помоћу кључне речи „од“. Користи се за обављање векторизованих операција на нашем ПиСпарк ДатаФраме-у. Ова функција се имплементира као декоратер преношењем три параметра. Након тога, можемо креирати кориснички дефинисану функцију која враћа податке у векторском формату (као што за ово користимо серије/НумПи) користећи стрелицу. У оквиру ове функције можемо да вратимо резултат.



Структура и синтакса:



Прво, погледајмо структуру и синтаксу ове функције:

@пандас_удф(тип података)
деф фунцтион_наме(оператион) -> цонверт_формат:
повратна изјава

Овде је фунцтион_наме име наше дефинисане функције. Тип података одређује тип података који враћа ова функција. Можемо да вратимо резултат користећи кључну реч „ретурн“. Све операције се изводе унутар функције са додељивањем стрелице.





Пандас_удф (функција и тип враћања)

  1. Први параметар је кориснички дефинисана функција која му се прослеђује.
  2. Други параметар се користи за одређивање типа повратних података из функције.

Подаци:

У целом овом водичу користимо само један ПиСпарк ДатаФраме за демонстрацију. Све кориснички дефинисане функције које дефинишемо примењују се на овај ПиСпарк ДатаФраме. Уверите се да сте креирали овај ДатаФраме у свом окружењу прво након инсталације ПиСпарк-а.



импорт писпарк

из писпарк.скл импорт СпаркСессион

линукхинт_спарк_апп = СпаркСессион.буилдер.аппНаме( 'Линук савет' ).гетОрЦреате()

из писпарк.скл.фунцтионс импорт пандас_удф

из писпарк.скл.типес импорт *

увоз панде као панде

# детаља о поврћу

поврће =[{ 'тип' : 'поврће' , 'име' : 'парадајз' , 'лоцате_цоунтри' : 'САД' , 'количина' : 800 },

{ 'тип' : 'воће' , 'име' : 'банана' , 'лоцате_цоунтри' : 'КИНА' , 'количина' : двадесет },

{ 'тип' : 'поврће' , 'име' : 'парадајз' , 'лоцате_цоунтри' : 'САД' , 'количина' : 800 },

{ 'тип' : 'поврће' , 'име' : 'манго' , 'лоцате_цоунтри' : 'ЈАПАН' , 'количина' : 0 },

{ 'тип' : 'воће' , 'име' : 'лимун' , 'лоцате_цоунтри' : 'ИНДИЈА' , 'количина' : 1700 },

{ 'тип' : 'поврће' , 'име' : 'парадајз' , 'лоцате_цоунтри' : 'САД' , 'количина' : 1200 },

{ 'тип' : 'поврће' , 'име' : 'манго' , 'лоцате_цоунтри' : 'ЈАПАН' , 'количина' : 0 },

{ 'тип' : 'воће' , 'име' : 'лимун' , 'лоцате_цоунтри' : 'ИНДИЈА' , 'количина' : 0 }

]

# креирајте оквир тржишних података од горњих података

маркет_дф = линукхинт_спарк_апп.цреатеДатаФраме(вегетабле)

маркет_дф.схов()

Излаз:

Овде креирамо овај ДатаФраме са 4 колоне и 8 редова. Сада користимо пандас_удф() да креирамо функције које дефинише корисник и применимо их на ове колоне.

Пандас_удф() са различитим типовима података

У овом сценарију, креирамо неке кориснички дефинисане функције помоћу пандас_удф() и примењујемо их на колоне и приказујемо резултате користећи метод селецт(). У сваком случају користимо пандас.Сериес док изводимо векторизоване операције. Ово сматра вредности колоне као једнодимензионални низ и операција се примењује на колону. У самом декоратору наводимо тип повратка функције.

Пример 1: Пандас_удф() са типом стринга

Овде креирамо две кориснички дефинисане функције са типом враћања стринга да бисмо конвертовали вредности колоне типа стринг у велика и мала слова. Коначно, ове функције примењујемо на колоне „типе“ и „лоцате_цоунтри“.

# Конвертујте колону типа у велика слова помоћу пандас_удф

@пандас_удф(СтрингТипе())

деф типе_уппер_цасе(и: панда.Сериес) -> панда.Сериес:

ретурн и.стр.уппер()

# Конвертујте колону лоцате_цоунтри у мала слова помоћу пандас_удф

@пандас_удф(СтрингТипе())

деф цоунтри_ловер_цасе(и: панда.Сериес) -> панда.Сериес:

ретурн и.стр.ловер()

# Прикажи колоне користећи селецт()

маркет_дф.селецт( 'тип' ,типе_уппер_цасе( 'тип' ), 'лоцате_цоунтри' ,
земља_мала_слова( 'лоцате_цоунтри' )).Прикажи()

Излаз:

Објашњење:

Функција СтрингТипе() доступна је у модулу писпарк.скл.типес. Већ смо увезли овај модул док смо креирали ПиСпарк ДатаФраме.

  1. Прво, УДФ (кориснички дефинисана функција) враћа стрингове великим словима користећи функцију стр.уппер(). Ст.уппер() је доступан у структури података серије (пошто конвертујемо у низ са стрелицом унутар функције) која конвертује дати стринг у велика слова. Коначно, ова функција се примењује на колону „типе“ која је наведена у методи селецт(). Раније су сви стрингови у колони типа били малим словима. Сада су промењени у велика слова.
  2. Друго, УДФ враћа стрингове великим словима користећи стр.ловер() функцију. Ст.ловер() је доступан у структури података серије која конвертује дати стринг у мала слова. Коначно, ова функција се примењује на колону „типе“ која је наведена у методи селецт(). Раније су сви стрингови у колони типа били великим словима. Сада су промењени у мала слова.

Пример 2: Пандас_удф() са целобројним типом

Хајде да направимо УДФ који конвертује колону целог броја ПиСпарк ДатаФраме у Пандас серију и додајмо 100 свакој вредности. Проследите колону „квантитета“ овој функцији унутар методе селецт().

# Додајте 100

@пандас_удф(ИнтегерТипе())

деф адд_100(и: панда.Сериес) -> панда.Сериес:

ретурн и+ 100

# Проследите колону количине на горњу функцију и прикажите.

маркет_дф.селецт( 'количина' ,адд_100( 'количина' )).Прикажи()

Излаз:

Објашњење:

Унутар УДФ-а понављамо све вредности и претварамо их у серије. Након тога свакој вредности у низу додајемо 100. Коначно, прослеђујемо колону „количина“ овој функцији и можемо видети да је 100 додато свим вредностима.

Пандас_удф() са различитим типовима података користећи Гроупби() и Агг()

Погледајмо примере за прослеђивање УДФ-а у агрегиране колоне. Овде се вредности колона прво групишу помоћу функције гроупби(), а агрегација се врши помоћу функције агг(). Ми прослеђујемо наш УДФ унутар ове агрегатне функције.

Синтакса:

писпарк_датафраме_објецт.гроупби( 'гроупинг_цолумн' ).агг(УДФ
(писпарк_датафраме_објецт[ 'колона' ]))

Овде се прво групишу вредности у колони за груписање. Затим се врши агрегација на сваком груписаном податку у односу на нашу УДФ.

Пример 1: Пандас_удф() са агрегатном средњом вредношћу()

Овде креирамо кориснички дефинисану функцију са повратним типом флоат. Унутар функције израчунавамо просек користећи функцију меан(). Овај УДФ се прослеђује у колону „количина“ да би се добила просечна количина за сваки тип.

# враћа средњу вредност/просек

@пандас_удф( 'пловак' )

деф просечна_функција(и: панда.Сериес) -> флоат:

врати и.меан()

# Проследите колону количине функцији груписањем колоне типа.

маркет_дф.гроупби( 'тип' ).агг(авераге_фунцтион(маркет_дф[ 'количина' ])).Прикажи()

Излаз:

Групишемо се на основу елемената у колони „тип“. Формирају се две групе – „воће” и „поврће”. За сваку групу се израчунава и враћа средња вредност.

Пример 2: Пандас_удф() са агрегатом Мак() и Мин()

Овде креирамо две кориснички дефинисане функције са целобројним (инт) повратним типом. Први УДФ враћа минималну вредност, а други УДФ враћа максималну вредност.

# пандас_удф који враћају минималну вредност

@пандас_удф( 'инт' )

деф мин_(и: панда.Сериес) -> инт:

врати и.мин()

# пандас_удф који враћају максималну вредност

@пандас_удф( 'инт' )

деф мак_(и: панда.Сериес) -> инт:

врати и.мак()

# Проследите колону количине у мин_ пандас_удф груписањем лоцате_цоунтри.

маркет_дф.гроупби( 'лоцате_цоунтри' ).агг(мин_(маркет_дф[ 'количина' ])).Прикажи()

# Проследите колону количине у мак_ пандас_удф груписањем лоцате_цоунтри.

маркет_дф.гроупби( 'лоцате_цоунтри' ).агг(мак_(маркет_дф[ 'количина' ])).Прикажи()

Излаз:

Да бисмо вратили минималне и максималне вредности, користимо функције мин() и мак() у типу враћања УДФ-ова. Сада групишемо податке у колону „лоцате_цоунтри“. Формирају се четири групе („КИНА“, „ИНДИЈА“, „ЈАПАН“, „САД“). За сваку групу враћамо максималну количину. Слично томе, враћамо минималну количину.

Закључак

У основи, пандас_удф () се користи за обављање векторизованих операција на нашем ПиСпарк ДатаФраме-у. Видели смо како да креирамо пандас_удф() и применимо га на ПиСпарк ДатаФраме. Ради бољег разумевања, разматрали смо различите примере узимајући у обзир све типове података (стринг, флоат и цео број). Могуће је користити пандас_удф() са гроупби() преко функције агг().