apache-spark - Spark .setMaster ("local[*]") 与 .setMaster ("local[3]") 的不同输出

标签 apache-spark apache-spark-sql spark-streaming

我在 Spark 上工作了一段时间。最近我遇到了一些奇怪的情况,我试图找出根本原因。

我有疑问

Different output with .setMaster("local[*]") and .setMaster("local[3]") ?

根据我目前的理解*从本地系统动态分配核心,在以后的情况下我们手动提供用于程序执行的核心。

我的问题是每当我给予 * 时,我都会得到一些不想要的结果。 当我通过手动提供核心来运行相同的代码时,它给出了完美的结果。

I am running application on 4 core CPU.

由于人们将其标记为重复,我将尝试更深入地解释。 我有一个 id 和时间戳的 RDD,所以我想要实现的是找到两个连续行之间超过 15 分钟间隔的间隙。使用以下代码:-

 val lists = rdd.zipWithIndex().map(p => {

 if (p._2 == 0) {
      moveLastGpsdt = p._1.gpsdt
      imei = p._1.imei
 } else if (p._2 > 0) {
      val timeDiffs = p._1.gpsdt.getTime() - moveLastGpsdt.getTime()
      if (p._1.imei.equals(imei) && timeDiffs > 900000L) {
        println("Unreachable " + moveLastGpsdt + " " + p._1.gpsdt)
      Arrayimeistoppage = events(p._1.imei, "Unreachable", moveLastGpsdt,p._1.gpsdt)
      }
Arrayimeistoppage
})

现在,我有了一组记录。当我使用 "local[star]"运行时,它会跳过一些数据,但是如果我使用 local[1]/local[2]/local[3] ,它会为所有行提供正确的结果。我检查了 rdd.partition,如果是本地[*],我得到 4 个分区。我有 4 核 CPU,但根据我的理解,1 个核心用于操作系统,其他核心只能用于处理。那么,在 local[star] 的情况下我们如何获得 4 个核心,最大应该是 3 个,对吗?

最佳答案

当您使用 local[*] 时,spark 将使用驱动程序上的所有核心。当您指定 local[3] 时,spark 将仅使用 3 个核心。

关于apache-spark - Spark .setMaster ("local[*]") 与 .setMaster ("local[3]") 的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52252637/

相关文章:

apache-spark - 比较 2 个 spark RDD 以确保第一个值在第二个 RDD 的范围内

apache-spark - 如何将连续 3 行视为一个数据集加载数据集?

scala - Spark udf 初始化

java - 构造函数 JavaStreamingContext(SparkConf, Duration) 未定义

scala - 使用spark和scala将ListBuffer [List [Any]]值写入CSV

apache-spark - 创建DataFrame时Spark报错

python - 如何在 PySpark 中有效地按值排序?

scala - Spark 错误 - 退出状态 : 143. 诊断:根据请求终止容器

apache-spark - 如何有效地从 Cassandra 读取数百万行?

scala - 在本地计算机上运行Spark Streaming时出现“连接被拒绝”错误