Загрузить данные кредитной карты в 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 МБ.

Данные представляют собой анонимные транзакции по кредитным картам, содержащие подлинные и мошеннические случаи. Транзакции происходили в течение двух дней в течение сентября 2013 года, и набор данных включает в себя в общей сложности 284 807 транзакций, из которых 492 являются мошенническими, что составляет всего 0,172% от общего числа. Таким образом, этот набор данных представляет некоторые проблемы для анализа, поскольку он сильно несбалансирован. Набор данных состоит из следующих полей:

  • Время: количество секунд, прошедших между транзакцией и первой транзакцией в наборе данных.
  • От V1 до V28: подробности недоступны по соображениям конфиденциальности.
  • Сумма. Денежная стоимость транзакции.
  • Класс. Переменная ответа (0 = нет мошенничества, 1 = мошенничество).

Загрузить CSV-файл

Мы можем загрузить файл CSV в Databricks CE с помощью браузера файлов DBFS. Мы можем проверить, включен ли браузер файлов DBFS, сначала найдя Настройки на левой панели навигации. . Теперь мы выберем Консоль администратора. На странице консоли администратора мы видим три варианта:

Мы выберем Настройки рабочей области.

Прокрутив вниз страницу настроек рабочей области, мы найдем файловый браузер 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 и создает кадр данных с именем 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 Managed Service.

В следующей ячейке кода мы установим некоторые параметры для 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"))

Это запишет кадр данных в таблицу с именем 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))

Это запишет кадр данных в таблицу с именем credit_card_tx2 в базе данных fraud_detection. Мы можем проверить, что эта таблица была успешно создана из SingleStore. Использование %%time в ячейке кода позволяет нам измерить операцию записи.

Визуально на рис. 9 показана наша установка JDBC.

Сравнивая два значения %%time, должно быть ясно, что коннектор SingleStore Spark по умолчанию намного быстрее, чем JDBC. Поэтому мы могли бы использовать Spark для выполнения операций ETL с SingleStore.

Резюме

Во второй статье этой серии «Обнаружение мошенничества» мы успешно загрузили данные нашей кредитной карты в Spark Dataframe, проверили количество строк и затем записали Dataframe в SingleStore, используя как SingleStore Spark Connector, так и JDBC. Сравнивая производительность этих двух подходов, мы должны увидеть, что коннектор SingleStore Spark «из коробки» намного быстрее, чем JDBC.