У меня следующий json из потока Кафки
[{timestamp: 2019-01-01T00:00:00z, id:A, value: 3.15}
{timestamp: 2019-01-01T00:00:00z, id:B, value: 0.32}
{timestamp: 2019-01-01T00:00:00z, id:C, value: 1.75}
{timestamp: 2019-01-01T00:00:00z, id:D, value: 2.20}
{timestamp: 2019-01-01T00:00:10z, id:A, value: 2.05}
{timestamp: 2019-01-01T00:00:10z, id:B, value: 0.01}
{timestamp: 2019-01-01T00:00:10z, id:C, value: 3.55}
{timestamp: 2019-01-01T00:00:10z, id:D, value: 1.92}] ...
Моя конечная цель - вычислить корреляцию между этими переменными и получить что-то вроде этого:
+--------------------+-------+
|element 1| element 2| corr|
+--------------------+-------+
| A| A| 1.0|
| A| B| 0.98|
| A| D| 0.02|
| B| B| 1.0|
| B| C| 0.45|
+--------------------+-------+
...
Я могу успешно сделать это, используя традиционный способ, которым я могу легко манипулировать кадром данных и поворачивать его. Проблема в том, что я перехожу на структурированную потоковую передачу, но она не позволяет мне выполнять такого рода агрегацию.
Я экспериментировал с преобразованиями, но лучшее, что я мог получить, это полу-развернутая таблица, где [id] - это массив элементов, принадлежащих этому конкретному идентификатору.
+---------+-----+----+----+----+
| id| A| B| C| D|
+---------+-----+----+----+----+
| A| [A]| | | |
| B| | [B]| | |
| C| | | [C]| |
| D| | | | [D]|
+---------+-----+----+----+----+
...
То, что я сейчас рассматриваю, это перенос этого фрейма данных в файл CSV, чтобы я мог его прочитать, собрать во второй раз. Проблема в том, что это большой массив данных, и я хотел бы сделать это с одним конвейером.
Итак, у вас есть представление о том, как я могу получить корреляционную матрицу из потока значений?