Заредете данните за кредитната карта в SingleStore
Резюме
В първата част от тази поредица за откриване на измами създадохме и конфигурирахме Databricks CE клъстер. В тази втора статия ще заредим данни за кредитни карти в нашата среда на Spark. Също така ще сравним ефективността на SingleStore Spark Connector с JDBC за зареждане на нашите данни в SingleStore от Spark.
Файловете на бележника, използвани в тази поредица от статии, са налични в GitHub във формати DBC, HTML и iPython.
Въведение
Това е поредица от статии от няколко части и е структурирана по следния начин:
- Конфигуриране на Databricks CE.
- Заредете данните за кредитната карта в SingleStore.
- Създайте и оценете модел на логистична регресия.
Тази втора статия обхваща част 2, Зареждане на данните от кредитната карта в SingleStore. Моля, уверете се, че сте изпълнили настройката и изискванията, описани в първата статия, ако следвате тази серия.
В нашия акаунт за управлявана услуга на SingleStore нека използваме SQL редактора, за да създадем нова база данни. Наречете това fraud_detection, както следва:
CREATE DATABASE IF NOT EXISTS fraud_detection;
Ще изпълним командата и ще проверим дали е изпълнена.
Имаме нужда от някои данни за нашия случай на употреба. Можем да намерим действителни данни за кредитни карти в Kaggle. Ако нямате акаунт в Kaggle, създайте такъв и изтеглете файла creditcard.csv. Уебсайтът на Kaggle посочва, че този файл е с размер 143,84 MB.
Данните са анонимни транзакции с кредитни карти, съдържащи истински и измамни случаи. Транзакциите са извършени в продължение на два дни през септември 2013 г., а наборът от данни включва общо 284 807 транзакции, от които 492 са измамни, представляващи само 0,172% от общия брой. Следователно този набор от данни представлява някои предизвикателства за анализа, тъй като е силно небалансиран. Наборът от данни се състои от следните полета:
- Време: Броят секунди, изминали между транзакция и първата транзакция в набора от данни.
- V1 до V28: Подробностите не са налични поради причини за поверителност.
- Сума: Паричната стойност на транзакцията.
- Клас: Променливата за отговор (0 = няма измама, 1 = измама).
Качете CSV файл
Можем да качим CSV файла в Databricks CE с помощта на DBFS File Browser. Можем да проверим дали DBFS File Browser е активиран, като първо намерим Settings в левия панел за навигация . Сега ще изберем Admin Console. На страницата Admin Console можем да видим три опции:
Ще изберем Настройки на работното пространство.
Превъртайки надолу страницата с настройки на работното пространство, ще намерим файловия браузър на DBFS, както следва:
В този случай виждаме, че е деактивиран. Трябва да превключим бутона от дясната страна, за да активираме тази функция, както следва:
След това ще трябва да презаредим тази страница на браузъра, за да се уверим, че функцията е активна. След като това стане, ще изберем Данни (1) от левия навигационен панел, последвано от DBFS (2), след това FileStore ( 3) и накрая бутона Качване (4), както е показано на фигура 1.
След това ще намерим CSV файла, който изтеглихме по-рано, и ще Плъзнем файлове за качване или ще използваме файловия браузър (1) и след това ще щракнете върху Готово (2), както е показано в Фигура 2.
След като CSV файлът бъде успешно качен, трябва да има отметка до файла (1) и можем да щракнете върху Готово (2), както е показано на фигура 3.
CSV файлът вече трябва да се вижда в директорията, както е показано на фигура 4.
Попълнете тетрадката
Нека сега създадем нов бележник. Ще го наречем Програма за зареждане на данни за откриване на измами с помощта на логистична регресия. Ще прикрепим нашия нов преносим компютър към нашия клъстер Spark, както е показано на фигура 5.
Като използваме опциите от падащото меню за клетка с код (1), можем да покажем заглавието на клетка с код (2), както е показано на фигура 6.
След това това заглавие може да бъде променено чрез редактиране (1), както е показано на Фигура 7. Това ще ни помогне да организираме нашия код и ще ни напомни какво се опитваме да постигнем във всяка клетка с код.
Ще добавим следния код (2):
df = spark.read.csv("/FileStore/creditcard.csv", header = True, inferSchema = True)
Това чете CSV файла и създава Dataframe, наречен df. Също така казваме на Spark, че има заглавен ред и го молим да определи типовете данни за всяка колона. И накрая, можем да добавим нова кодова клетка, като задържим курсора на мишката над знака + под съществуваща кодова клетка (3) и щракнете върху нея.
За да изпълним всяка клетка с код, можем да използваме Shift + Enter. Този първи пример ще създаде Dataframe.
В следващата кодова клетка ще преброим броя на редовете, както следва:
df.count()
Изпълнявайки това, получаваме стойността 284807.
В следващата кодова клетка, за да покажем Dataframe, можем да използваме:
display(df)
В следващата кодова клетка, за да намерим броя на измамните и неизмамните транзакции, можем да използваме:
display(df.groupBy("Class").count())
Това ни показва, че има 492 (1 = измама) и 284315 (0 = няма измама) транзакции.
Вече сме готови да напишем Dataframe в SingleStore. В следващата кодова клетка можем да добавим следното:
%run ./Setup
Това ще изпълни бележника, който създадохме в предишната статия. Трябва да се уверим, че адресът и паролата на сървъра са добавени за нашия клъстер за управлявани услуги на SingleStore.
В следващата кодова клетка ще зададем някои параметри за SingleStore Spark Connector, както следва:
spark.conf.set("spark.datasource.singlestore.ddlEndpoint", cluster) spark.conf.set("spark.datasource.singlestore.user", "admin") spark.conf.set("spark.datasource.singlestore.password", password) spark.conf.set("spark.datasource.singlestore.disablePushdown", "false")
Това са параметри за клъстера SingleStore, потребителско име, парола и дали Pushdown е активирано или деактивирано. Ще обсъдим Pushdown в отделна статия.
Накрая сме готови да напишем Dataframe в SingleStore с помощта на Spark Connector:
%%time (df.write .format("singlestore") .option("loadDataCompression", "LZ4") .mode("overwrite") .save("fraud_detection.credit_card_tx"))
Това ще запише Dataframe в таблица, наречена credit_card_tx в базата данни fraud_detection. Можем да проверим дали тази таблица е създадена успешно от SingleStore. Използването на %%time
в кодовата клетка ни позволява да измерим операцията за запис. След това можем да сравним това с използването на JDBC.
Визуално Фигура 8 показва нашата настройка на Spark Connector.
В следващата кодова клетка можем да зададем JDBC променливите, както следва:
jdbc_url = "jdbc:mysql://{0}:{1}/{2}".format(server, port, "fraud_detection") properties = { "user": "admin", "password": password, }
В следващата кодова клетка можем да запазим Dataframe в SingleStore с помощта на JDBC:
%%time (df.write .jdbc(url = jdbc_url, table = "credit_card_tx2", mode = "overwrite", properties = properties))
Това ще запише Dataframe в таблица, наречена credit_card_tx2 в базата данни fraud_detection. Можем да проверим дали тази таблица е създадена успешно от SingleStore. Използването на %%time
в кодовата клетка ни позволява да измерим операцията за запис.
Визуално Фигура 9 показва нашата JDBC настройка.
Сравнявайки двете стойности на %%time
трябва да стане ясно, че извън кутията SingleStore Spark Connector е много по-бърз от JDBC. Следователно можем да използваме Spark за извършване на ETL операции със SingleStore.
Резюме
В тази втора статия от тази поредица за откриване на измами ние успешно заредихме данните на нашата кредитна карта в Spark Dataframe, проверихме броя на редовете и след това записахме Dataframe в SingleStore, използвайки както SingleStore Spark Connector, така и JDBC. Сравнявайки производителността на тези два подхода, трябва да видим, че извън кутията SingleStore Spark Connector е много по-бърз от JDBC.