Мы много говорили о том, как просто SQL-запросить необработанные данные в память графического процессора с помощью нашего нового BlazingSQL API. Мы подумали, что вместо того, чтобы рассказывать вам больше, было бы лучше показать вам реальный пример.

Для целей этой демонстрации мы будем использовать данные о сетевом трафике.

Начало работы с BlazingSQL

Пакет импорта

from blazingsql import BlazingContext

Создайте яркий контекст

Вы можете думать о BlazingContext так же, как о контексте Spark. Здесь будет храниться такая информация, как зарегистрированные файловые системы и созданные вами таблицы.

bc = BlazingContext()

Создать таблицу

Теперь нам просто нужно создать таблицу. Apache Parquet — отличный формат файлов с открытым исходным кодом, созданный для таких систем, как HDFS. Файлы Apache Parquet также содержат метаданные, которые сами описывают схему, что упрощает импорт!

bc.create_table('performance', '/blazingdb/notebooks/netflow.parquet')

Запрос таблицы

Теперь вы можете написать обычный SQL-запрос, и данные будут обрабатываться на графическом процессоре с помощью BlazingSQL.

result= bc.sql('SELECT * FROM main.performance', ['performance'])

Примечание. На данный момент вы должны включать таблицы в качестве аргумента в форме списка (если у вас более одной таблицы). Вы также должны указать main перед именем таблицы в самом запросе.

Теперь вы получаете объект результата и создаете GPU DataFrame (GDF) внутри RAPIDS!

#Get result object
result = result.get()
#Create GDF from result object
result_gdf = result.columns

Вы можете легко распечатать результаты через Python, поскольку это объект общей памяти, который можно передать BlazingSQL, cuDF, cuML, cuGraph и всему остальному, что соответствует стандарту с открытым исходным кодом GDF и Apache Arrow в памяти графического процессора!

… и это все! Вы только что использовали SQL для создания GDF в памяти в шести строках кода!

Промежуточный SQL

Однако нет причин останавливаться на достигнутом, мы можем сделать это более сложным, если захотим. Итак, в интересах сложности давайте добавим еще одну таблицу.

bc.create_table('names', '/blazingdb/notebooks/names.parquet')

И запустите более интенсивный запрос с LEFT OUTER JOINS, GROUP BYS и различными унарными операциями. Этот новый GDF даст нам краткий обзор активности Netflow.

result2 = bc.sql( '''
SELECT
  a.firstSeenSrcIp as source,
  COALESCE(min(b.name), 11111111) as sourceName,
  a.firstSeenDestIp as destination,
  COALESCE(min(c.name), 11111111) as destinationName,
  count(a.firstSeenDestPort) as targetPorts,
  SUM(a.firstSeenSrcTotalBytes) as bytesOut,
  SUM(a.firstSeenDestTotalBytes) as bytesIn,
  SUM(a.durationSeconds) as durationSeconds,
  MIN(parsedDate) as firstFlowDate,
  MAX(parsedDate) as lastFlowDate,
  COUNT(*) as attemptCount,
  AVG(b.__index_level_0__) as index
  FROM
  main.netflow a
  LEFT JOIN main.names b
  ON b.ip = a.firstSeenSrcIp
  LEFT JOIN main.names c
  on c.ip = a.firstSeenDestIp
  GROUP BY
  a.firstSeenSrcIp,
  a.firstSeenDestIp
  ''', ['netflow', 'names'])
result2 = result2.get()
result2_gdf = result2.columns

… и распечатать результат.

Использование других библиотек RAPIDS

Поскольку вся экосистема RAPIDS использует GDF, легко использовать cuDF, cuML, cuDNN, cuGRAPH и остальные RAPIDS AI, если у вас есть GDF в памяти. Для работы с ETL многие люди предпочитают Pandas для быстрых манипуляций. Поскольку cuDF отражает интерфейс Pandas, вы можете легко удалить ненужный столбец из GDF, используя метод .drop.

import cudf
result3_gdf = result2_gdf.drop('index')

На этом мы закончим, но обещаем, что в будущем у нас будут более подробные примеры. Удачи в начале! Дайте нам знать, на какие вопросы мы можем ответить и какие у вас есть предложения по улучшению процесса!

Что дальше?

  • Ждите BlazingSQL версии 0.3 на этой неделе! К этому также будет добавлена ​​запись в блоге.
  • В блоге появится сообщение о том, что #BlazingSQL и Graphistry на #RAPIDSAI – лучший способ анализа сетевого трафика в режиме реального времени.
  • В эту среду мы выступаем на конференции XLDB в Стэнфордском университете. Загляните и поздоровайтесь, если вы рядом.
  • Наш распределенный движок (версия 0.4) появится очень скоро!
  • Подпишитесь на нас в Твиттере!