Résultat différent dans les mêmes fonctions Scala et Java spark
J'ai exécuté du code simple écrit en Java à partir du guide de démarrage rapide Spark:
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local[4]");
JavaSparkContext sc = new JavaSparkContext(conf);
Accumulator<Integer> counter = sc.accumulator(0);
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
JavaRDD<Integer> rdd = sc.parallelize(data);
rdd.foreach(counter::add);
System.out.println("Counter value " + counter);
}
, Il imprime "Counter value 15"
comme prévu.
J'ai du code avec la même logique écrit en Scala:
object Counter extends App {
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[4]")
val sc = new SparkContext(conf)
val counter = sc.accumulator(0)
val data = Array(1, 2, 3, 4, 5)
val rdd = sc.parallelize(data)
rdd.foreach(x => counter += x)
println(s"Counter value: $counter")
}
Mais il imprime à chaque fois un résultat incorrect (
Java spark lib "org.apache.spark:spark-core_2.10:1.6.1"
Scala spark lib "org.apache.spark" %% "spark-core" % "1.6.1"
4
1 answers
Un conseil dans le démarrage rapide documentation dit:
Notez que les applications doivent définir une méthode main () au lieu de l'extension de la scala.App. Les sous-classes de la scala.Application peut ne pas fonctionner correctement.
Peut-être que c'est le problème?
Essayez avec:
object Counter {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[4]")
val sc = new SparkContext(conf)
val counter = sc.accumulator(0)
val data = Array(1, 2, 3, 4, 5)
val rdd = sc.parallelize(data)
rdd.foreach(x => counter += x)
println(s"Counter value: $counter")
}
}
6
Author: ale64bit, 2016-04-08 16:39:47