У меня есть эта функция в программе драйвера, которая собирает результат из rdds в массив и отправляет его обратно. Однако, несмотря на то, что у RDD (в dstream) есть данные, функция возвращает пустой массив ... Что я делаю неправильно?Соберите результаты из RDD в программе драйвера dstream
def runTopFunction() : Array[(String, Int)] = {
val topSearches = some function....
val summary = new ArrayBuffer[(String,Int)]()
topSearches.foreachRDD(rdd => {
summary = summary.++(rdd.collect())
})
return summary.toArray
}
Вместо того, чтобы «не блокировать», вычисление является ленивым и запланировано на более поздний момент. Таким образом, этот ответ неверен в терминологии. – maasg
foreachrdd не ленится так же, как преобразования на DStreams или RDD, это скорее действие, чем трансформация. – Holden
@ user2888475 Тем не менее ничего не произойдет до тех пор, пока 'streamingContext.start()' не будет вызван, и что-то произойдет запланировано на каждый интервал времени потоковой передачи. Действия в Spark Streaming приводят к планированию так же, как в Spark, они приводят к выполнению. т. е. Dstream без действий ничего не сделает. – maasg