Заредете данните за кредитната карта в SingleStore

Резюме

В първата част от тази поредица за откриване на измами създадохме и конфигурирахме Databricks CE клъстер. В тази втора статия ще заредим данни за кредитни карти в нашата среда на Spark. Също така ще сравним ефективността на SingleStore Spark Connector с JDBC за зареждане на нашите данни в SingleStore от Spark.

Файловете на бележника, използвани в тази поредица от статии, са налични в GitHub във формати DBC, HTML и iPython.

Въведение

Това е поредица от статии от няколко части и е структурирана по следния начин:

  1. Конфигуриране на Databricks CE.
  2. Заредете данните за кредитната карта в SingleStore.
  3. Създайте и оценете модел на логистична регресия.

Тази втора статия обхваща част 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.