java - 相同的 Scala 和 Java spark 函数产生不同的结果

标签 java scala apache-spark

我根据 Spark 快速入门指南执行了用 Java 编写的简单代码:

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);
}

它按预期打印 "Counter value 15"。 我有用 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")
}

但它每次都打印不正确的结果 (<15)。我的 Scala 代码有什么问题?

Java spark lib "org.apache.spark:spark-core_2.10:1.6.1"
Scala spark lib "org.apache.spark" %% "spark-core" % "1.6.1"

最佳答案

quick-start 中的建议文档说:

Note that applications should define a main() method instead of extending scala.App. Subclasses of scala.App may not work correctly.

也许这就是问题所在?

尝试:

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")
    }
}

关于java - 相同的 Scala 和 Java spark 函数产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36503480/

相关文章:

Worker中的Python有不同的版本: environment variables are set correctly

java - 在testng测试中模拟通过CAS登录的用户

java StreamTokenizer wordChars() 和 nextToken()

postgresql - 是否可以为 slick-hikaricp 设置查询超时?

scala - 如何匹配没有特定类型类实例的类型?

apache-spark - 在 BinaryObjects 的 Ignite 缓存上执行 SQL

java - 如何使用 Java SDK 查询最近五分钟的 Azure 存储指标

java - 一个类在 JVM 中占用多少空间?

scala - 执行此操作的 Scala 方法是什么

docker - 具有Docker支持的EMR 6 Beta具有S3访问问题