Скажем, у меня есть следующий код.Планка Scala/Spark с повторными вызовами функций
def f(x): (Array[Double], Array[Int])={
val data: Array[Double] //1D array
val index: Array[Int] //Data element's index
//Read data from a file into "data"
//Generate index (based on value "x") into "index"
(dset_datas, index)
}
sc.range(0, 10, 1, 10).flatMap.(x => (f(x)._1 zip f(x)._2))
Вопросы:
1) Будет ли функция F (х) вызывается дважды для каждого х в пределах flatmap? Так как сначала я назвал f (x) ._ 1, а затем f (x) ._ 2.
2) Параллельно будет выполняться лифта (особенно часть считывания данных)? Скажем, у меня было 3 узла, и каждый узел имеет 32 ядра. Я установил --num-executors = 2 и --executor-core = 32. Другой узел используется как узел драйвера.
Чтобы ответить на вышеуказанные вопросы, я искал документы для Spark/Scala, но ответа не получил. Я попытался запустить код в своей собственной системе. Похоже, что
1) f (x) вызывается дважды, потому что я обнаружил, что разделы данных обрабатываются twices. Но я не уверен.
2) Я заметил, что две папки-исполнители создаются под файловой системой искрового журнала, а также некоторые stdout от каждого исполнителя. Но я тоже не уверен.
Спасибо!