我在 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/