Я использую Databricks для подключения к Eventhub, где каждое сообщение, поступающее из EventHub, может сильно отличаться от другого.
В сообщении у меня есть тело и идентификатор.
Я ищу производительность, поэтому я избегаю сбора данных или ненужных обработок, а также хочу делать сохранение параллельно по разделам. Однако я не уверен, как это сделать должным образом.
Я хочу добавить тело каждого идентификатора в отдельную И КОНКРЕТНУЮ таблицу партиями. Идентификатор предоставит мне информацию, которую мне нужно сохранить в нужной таблице. Итак, для этого я пробовал 2 подхода:
- Разбиение на разделы: повторное разделение (numPartitions, ID) -> ForeachPartition
- Группировка: groupBy ('ID'). apply (myFunction) # @ pandas_udf GROUPED_MAP
Подход 1 не выглядит очень привлекательным для меня, процесс перераспределения выглядит ненужным, и я видел в документации, что даже если я установлю столбец в качестве раздела, он может сохранить многие идентификаторы этого столбца в одном разделе. Это только гарантирует, что все данные, связанные с этим идентификатором, находятся в разделе, а не разделены.
Подход 2 вынуждает меня выводить данные из pandas_udf, фрейма данных с той же схемой ввода, чего не произойдет, поскольку я преобразовываю сообщение eventhub из CSV в фрейм данных, чтобы сохранить его в таблице. Я мог бы вернуть тот же фрейм данных, который получил, но это звучит странно.
Есть ли какой-нибудь хороший подход, которого я не вижу?