Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark executors中内存中数据结构的预期行为是什么?_Scala_Apache Spark - Fatal编程技术网

Scala Spark executors中内存中数据结构的预期行为是什么?

Scala Spark executors中内存中数据结构的预期行为是什么?,scala,apache-spark,Scala,Apache Spark,我想了解我是否期望以下行为正确 假设我有100个执行器,每个执行器有4个核心(意味着线程) 我正在处理一个非常大的RDD,其中的行包含一个可能无效的类,如果它是-我不想处理给定的行 我不想使用广播,因为无效行在运行中被确定为无效(在RDD处理期间) 我考虑过使用内存集,在最坏的情况下,每个执行器将一次性处理一个“坏”行-我同意这一点 我是正确地期待这种行为,还是遗漏了什么 val some_set = mutable.HashSet[String] some_rdd.filterNot(r =&

我想了解我是否期望以下行为正确

假设我有100个执行器,每个执行器有4个核心(意味着线程) 我正在处理一个非常大的RDD,其中的行包含一个可能无效的
,如果它是-我不想处理给定的行

我不想使用广播,因为无效行在运行中被确定为无效(在RDD处理期间)

我考虑过使用内存集,在最坏的情况下,每个执行器将一次性处理一个“坏”行-我同意这一点

我是正确地期待这种行为,还是遗漏了什么

val some_set = mutable.HashSet[String]
some_rdd.filterNot(r => some_set.contains(r.some_class.id)
        .map(some_row => {
  try{
    some_def(some_row)
}
catch{
  case e:Throwable => {
     some_set.add(some_row.some_class.id)
     log.info("some error")
  }
 }
}

在您的示例中,
一些设置将被序列化,并与任务代码一起发送给执行者。考虑到
some_set
的大小为10.000的情况,Spark程序的最大任务大小约为200KB(10000 x 20chars)。满足当前最大建议任务大小的。另一方面,如果任务大小超过1GB,则会出现类似以下内容的警告:

阶段1包含一个非常大的任务(1024MB)。最大值 建议的任务大小为1000 KB

如果由于某种原因,<代码>某个集合的大小将在未来超过1MB的范围内增加,请考虑使用.< /P> 类似问题


嗨,罗伊,一些集合的大小是多少?嗨,大多数情况下它都是0,但在极少数情况下,它最多可以是10000(罕见)。每个元素是一个最多20个字符的字符串。嗨,Abiratsis,谢谢你的详细回答。但我的问题是,每个执行器都有几个线程,我使用的是一个未同步的集合,我想知道集合内容是否为-1。每个遗嘱执行人的情况会有所不同吗?2.将在不同的执行器线程之间共享?不知道它的大小是最优还是无效,正如我在上面提到的,集合将与任务代码一起发送给每个执行者,因此将始终是相同的。线程或集合共享之间不会发生隐藏的相互通信。每个线程将处理完全相同的集合