Построение конвейера данных с помощью Spark и RDBM - PullRequest
0 голосов
/ 02 июля 2019

Мой сценарий: конвейер данных:

файлы -> ETL (проприетарное приложение) -> База данных данные хранятся в реляционной базе данных (postgres) после приема.

Все данные находятся в паре таблиц, которые обновляются новыми записями при поступлении нового файла. Таким образом, таблица увеличивается с точки зрения записей во времени. Мне нужно запустить алгоритм, который рассчитывает некоторые показатели по данным, которые хранятся в базе данных. Индикаторы затем сохраняются в базе данных. Я хотел бы использовать Spark, а не пользовательский модуль. Алгоритм требует времени «движущегося» окна из n выборок. То есть, если у нас есть окно из 2 выборок и 4 выборок (точек данных), вычисление будет таким:

d1, d2 -> result1

d2, d2 -> результат2

d3, d4 -> результат3

Мой вопрос:

  • Как я могу запустить искровое выполнение, когда новые данные хранятся в базе данных?

Мой первый ответ был: После завершения ETL вызовите Spark для базы данных (spark SQL). Поскольку мне нужно обрабатывать только приращение (не всю таблицу), мне нужно использовать последнюю метку времени (или индекс строки) данных, которые я обработал. Пример: в таблице 2 записи (точки данных)

1 д1 2019-06-30 08: 00

2 д2 2019-06-30 08: 30

ETL «запускает» Spark в 8:31, который, в свою очередь, запускает и вычисляет расчет (результат 1). Результат сохраняется вместе с отметкой времени последней точки данных. В 10:00 ETL обновит базу данных 2 новыми записями:

3 д3 2019-06-30 09: 59

4 d4 2019-06-30 10: 00

Теперь Spark запрашивает базу данных, запрашивая данные d2, d3 и d4 (d2 необходим, потому что временные окна составляют 2 образца, см. Пример выше). Чтобы получить d2, я использую минимальную разницу временных меток от d3 или непосредственно это индекс строки. Затем искра вычисляет результат 2 (d2, d3) и результат 4 (d3, d4). Я не знаю, является ли это лучшим способом, возможно, я попытаюсь сделать эти данные потоком, а затем использовать StreamingContext.

Дополнительная информация:

файлы имеют до 5000 строк

период длится от 5 минут до суток. Это переменная.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...