Я имею дело со странным поведением, когда я изменяю количество ядер в своем приложении Spark, и вот код:
import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkContext, SparkConf}
object Test extends App {
Logger.getLogger("org").setLevel(Level.WARN)
var listLink: List[String] = List()
def addListLink(s: String) = {
val list = s.split(",")
for (i <- 0 to list.length - 2) {
listLink = list(i)+ "-" + list(i + 1) :: listLink
}
}
val conf = new SparkConf().setMaster("local[1]").setAppName("Simple Application")
val sc = new SparkContext(conf)
val paths = sc.textFile("file:///tmp/percorsi.txt")
paths.foreach(x => addListLink(x))
println("Number of items:"+listLink.size)
println(listLink)
}
Мой входной файл выглядит примерно так:
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C
A,B,C
A,B,C
A,B,C
A,B,C
B,C,D
B,C,D
B,C,D
B,C,D
C,D
C,D
В основном для каждого пути я вызываю свой метод, который добавляет элемент в список, представляющий каждую последовательную пару элементов:
пример: "A,B,C,D" => ("A-B", "B-C", "C-D")
Как видите, в коде всего одно ядро
.setMaster("local[1]")
И если я запускаю свое приложение (локально или в кластере), я получаю то, что ожидаю.
println("Number of items:"+listLink.size)
//Result --> Number of Items : 38
Если я изменю количество ядер на 3 (например), я получу другие значения. Например 33 предмета вместо 38.
Я что-то упустил из-за количества ядер или чего-то еще (разделов и т. д.)?
Я думаю, что это довольно простое приложение, но я все равно получаю это странное поведение.
Кто-нибудь может мне помочь?
заранее спасибо
FF
foreach
Выполняет функцию без параметров для каждого элемента данных. - person eliasah   schedule 21.05.2015