Я хотел бы добавить к ответу Алекса:
Да, Spark Cassandra Connector может это сделать. Из исходного кода:
Метод getPreferredLocations сообщает Spark о предпочтительных узлах, из которых следует извлечь раздел, чтобы данные для раздела находились на том же узле, на который была отправлена задача. Если узлы Cassandra размещаются вместе с узлами Spark, запросы всегда отправляются процессу Cassandra, выполняющемуся на том же узле, что и процесс Spark Executor, поэтому данные не передаются между узлами. Если во время чтения происходит сбой или перегрузка узла Cassandra, запросы повторяются к другому узлу.
Что это плохое поведение.
В Cassandra, когда вы просите получить данные конкретного раздела, доступ только к одному узлу. Spark может получить доступ к 3 узлам благодаря репликации. Таким образом, без перетасовки у вас есть 3 узла, участвующих в работе.
Однако в случае oop, когда вы запрашиваете данные определенного раздела, обычно ко всем узлам в кластере обращаются, а затем Spark использует все узлы в кластере как исполнители.
Итак, если у вас есть 100 узлов: в Cassandra Spark будет использовать 3 узла. В случае oop Spark будет использовать 100 узлов.
Cassandra оптимизирована для операционных систем реального времени и поэтому не оптимизирована для аналитики, такой как озера данных.