Как транслировать только часть файла с Apache Spark - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь использовать Spark Streaming и Spark SQL с Python API.

У меня есть файл, который постоянно редактируется, добавляя несколько строк каждые случайные N секунд.

Этот файл может быть JSON, XML, CSV или TXT, даже таблицей SQL: я совершенно свободен в выборе наилучшего решения для моей ситуации.

У меня есть определенное количество полей, около 4-5. Возьмите эту таблицу в качестве примера:

+-------+------+-------+--------------------+ 
| event |  id  | alert |      datetime      |
+-------+------+-------+--------------------+
| reg   |  1   | def1  | 06.06.17-17.24.30  |
+-------+------+-------+--------------------+
| alt   |  2   | def2  | 06.06.17-17.25.11  |
+-------+------+-------+--------------------+
| mot   |  3   | def5  | 06.06.17-17.26.01  |
+-------+------+-------+--------------------+
| mot   |  4   | def5  | 06.06.17-17.26.01  |
+-------+------+-------+--------------------+

Я хочу транслировать с помощью Spark Streaming только новые строки . Таким образом, если я добавлю 2 новые строки, в следующий раз я захочу передать только эти две строки вместо всего файла (уже потокового)

Более того, я хочу отфильтровать или вычислить SQL-запрос Spark по всему файлу каждый раз, когда обнаруживается новая строка. Например, я хочу выбрать событие "mot" только в том случае, если оно появляется два раза за 10 минут, и этот запрос необходимо повторять при каждом изменении файла и получении новых данных.

Могут ли Spark Streaming и Spark SQL обрабатывать такие ситуации? И как?

1 Ответ

0 голосов
/ 28 июня 2018

Не поддерживается для источников файлов Spark

Считывает файлы, записанные в каталоге, как поток данных. Поддерживаемые форматы файлов: текст, csv, json, orc, parquet. См. Документы интерфейса DataStreamReader для более актуального списка и поддерживаемых опций для каждого формата файла. Обратите внимание, что файлы должны быть атомарно размещены в заданном каталоге, что в большинстве файловых систем может быть достигнуто с помощью операций перемещения файлов

и аналогично для устаревшей потоковой передачи (обратите внимание на документацию 2.2, но реализация не изменилась)

Файлы должны быть созданы в dataDirectory путем атомарного перемещения или переименования их в каталог данных.

...