Я использую Spark-Sql для запроса таблиц Кассандры.
В Cassandra я разделил свои данные с временным интервалом и одним идентификатором, поэтому на основе запросов мне нужно объединить несколько разделов с помощью spark-sql и выполнить агрегирование / группирование по результату объединения, что-то вроде этого:
for(all cassandra partitions){
DataSet<Row> currentPartition = sqlContext.sql(....);
unionResult = unionResult.union(currentPartition);
}
Увеличение ввода (количество загруженных разделов) увеличивает время отклика более, чем линейно, потому что объединения будут выполняться последовательно.
Поскольку нет ничего плохого в том, чтобы делать союзы параллельно, и я не знаю, как заставить спарк делать их параллельно, сейчас я использую ThreadPool
асинхронно загрузить все разделы в моем приложении (что может вызвать OOM), и каким-то образом выполнить сортировку или простую группу в java (что заставляет меня задуматься, почему даже я вообще использую spark?)
Короткий вопрос:
Как заставить spark-sql параллельно загружать разделы cassandra при их объединении?
Кроме того, я не хочу, чтобы в искре было слишком много задач. С помощью решения Home-Made Async я использую coalesece (1), поэтому одна задача выполняется очень быстро (только время ожидания на casandra).