Филтриране на Vs обогатяване на данни в Apache Spark

Знам, че това е неясна рубрика ... В по-широката схема за обработка на големи данни има различни възможности / възможности за избор, с различни компромиси за това как могат да се обработват данни. Намерението на този блог е да се обърне към тази неяснота, като сравнява две опции, които моят екип изпробва, и защо ние предпочетохме да предпочитаме една пред друга.

Данните се намират в ДНК на Capital One. Всички наши решения са базирани на данни и като финансова компания с много регулаторни изисквания, ние сме задължени да предоставим по-подробни данни за обработка, а не подробности на високо ниво.

Но преди да се впуснем в повече подробности около темата, ето бързата същност на Apache Spark за начинаещи (Преминете към следващия раздел, ако вече сте запознати с Apache Spark.)

Бързо въведение в Apache Spark

Apache Spark е рамка с големи данни с отворен код за анализ на масивни данни в мащаб с помощта на изчислителни клъстери. Основното предимство на Spark е изчислението в паметта, което увеличава скоростта на обработка на приложенията. Освен това Spark поддържа различни натоварвания като партида, машинно обучение, поточно използване на същата инфраструктура, създадена еднократно. Spark е стартиран в UC Berkeley като академичен проект и по-късно е допринесъл за фондация Apache през 20 юни 2013 г. Докато пише този блог, най-новата версия на Spark е 2.4

Нашето приложение за използване №1: Филтър

Capital One е тежък потребител на Apache Spark заради своите пакетни и поточни натоварвания. Приложението, върху което работя, е един от основните двигатели за обработка на транзакции с кредитни карти за изчисляване на награди за нашите клиенти. Нашият партиден тръбопровод има редица задачи Spark, а фокусът за този блог е върху първата версия на работа, наречена Filter.

Функционалност на филтъра

Филтърът приема транзакции с кредитни карти като вход, прилага куп бизнес логика и филтрира несъответстващи транзакции за печелене на награди.

Работен процес на високо ниво на работа на филтъра

Проблеми с филтър

Имаме тази версия в производството няколко месеца и осъзнахме проблем при отстраняване на грешки в проблема с данни. Всеки етап, споменат в горния тръбопровод, е трансформация на вътрешно съединение на искра между две набори от данни. Крайната продукция продължава квалифицирани транзакции с изчислени награди. Ние обаче не успяхме да проследим до нивото на транзакцията защо / коя конкретна бизнес логика го направи неквалифициран за получаване на награди. Това беше така, защото всички междинни набори от резултати на съединяване се изчисляват в паметта и преминават към следващия етап, когато се извършва искрово действие.

Веднага възникнаха естествени въпроси. Можем ли да направим броячи на искра в края на всеки етап и да кешираме набора от данни? Всъщност ние вече правехме това. Но проблемът беше, че можеше да ни даде само колко транзакции бяха филтрирани като част от бизнес логиката на етапа, а не подробности за всяка транзакция.

Примерно представяне на данни на работния процес (с отброявания)

Представяне на искрови данни за работа на филтъра

Да приемем, че десет транзакции се подават като входни данни. След прилагането на бизнес логиката (Приемливост на акаунта), само пет транзакции преминават към следващия етап, На следващия етап се случва същото и той филтрира още три транзакции, като накрая прави две квалифицирани транзакции с изчислени награди.

Как преодоляхме този проблем?

Както беше посочено по-горе, основният проблем е във филтрирането на данни за бизнес логика, като се използва вътрешно присъединяване на искра в паметта. Това затруднява навлизането в подробни подробности за всяка транзакция, определяйки защо / как бизнес правилата се прилагат за отстраняване на грешки. След много дискусии, екипът излезе с различен дизайн модел за обогатяване на данните, а не филтриране във всяка стъпка. Което ни води до ...

Нашият случай за използване на приложение № 2: Обогатяване

Новата ни работа е обогатяването. За тази работа, вместо да прилагаме филтриране на искра вътрешно присъединяване и бизнес логика в една стъпка, ние го правим на две стъпки.

  • Първа стъпка - обогатяване на данни, при която всеки етап обогатява необходимите данни от всеки бизнес-логика с помощта на искра ляв външен съединител.
  • Втора стъпка - филтриране на бизнес логиката, използвайки точките от данни, събрани в предишната стъпка.

Примерно представяне на данни на работния процес (с броеве) с помощта на обогатяване

Искрено представяне на данни за обогатяване на работа

Същият пример като преди. Десет транзакции се подават като вход. След прилагане на ляво външно съединение с бизнес логиката (Приемливост на акаунта), той събира необходимите колони за филтриране на по-късни етапи. Така че транзакциите не са филтрирани, по-скоро ние обогатяваме първоначалния входен набор от данни с необходимите колони с данни от всеки етап. След като приложихме филтрирането на бизнес логиката в последния етап, все още виждаме само две квалифициращи транзакции. Разликата обаче е по-обогатена информация, получена по пътя.

Предимства на обогатяването над филтъра

Сега на всеки етап необходимите данни се улавят с помощта на ляво външно съединение и се обогатяват в оригиналния набор от данни. Тя улавя информация за състоянието за по-подробен анализ / отстраняване на грешки по-късно. За прилагането на бизнес логиката се използват същите колони / флагове за данни и на по-късния етап дава същия резултат, но с повече подробности. С този подход успяхме да намерим състоянието на всяка колона / флаг с данни за бизнес логика за всяка транзакция.

Извършване на превключвателя

Когато разгърнахме обогатяването в Prod, искахме да се уверим, че продукцията е същата. За да проверим, ние стартирахме и двете задачи спрямо един и същи входен набор от данни и разгърнахме сравнителни задачи, за да сравним резултатите от Filter and Enrichment. През този период нашите сравнителни работни места последователно дават резултати както за филтриране, така и за обогатяване. Това ни даде увереност да продължим напред с новия си модел на обогатяване. След успешна проверка на производителността на работата по обогатяване в производството, ние сме заменили Filter и успешно управляваме обогатяването в производството вече една година. Филтърът е амортизиран и залез от общия ни работен процес за обработка.

Обогатяване срещу филтър?

Изборът ни на Apache Spark за усилията за модернизация на нашата платформа определено даде добри резултати по отношение на производителността и точността на цялостната работа. Нашата платформа обработва милиони транзакции на ден, присъждайки милиони мили, пари, точки на клиентите всеки ден. Предвид високите числа - по отношение на обработката и точността, които очаквахме от нашата платформа - всъщност не е изненада, че се наклонихме да обогатим чрез филтриране на нашите данни.

Модел на достойнствата на данните за обогатяване

Съхранява същия набор от данни и увеличава набора от данни в колони. Това подробно проследяване на данни помага за по-добро отстраняване на грешки и точност при идентифицирането и отчитането

Предимства на филтрирането на модела на данни

По-бързо изчисляване поради обработката в паметта и осигурява метрики на високо ниво

Надявам се това сравнение да помогне при компромиси с решение за употреба.

ИЗЛОЖЕНИЕ ЗА ОТКРИВАНЕ: Тези мнения са на автора. Освен ако не е посочено друго в този пост, Capital One не е свързана с нито една от споменатите компании. Всички използвани търговски марки и друга интелектуална собственост са собственост на съответните им собственици. Тази статия е © 2019 Capital One.