Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
Apache spark Apache Spark中单个作业中的条件迭代_Apache Spark - Fatal编程技术网

Apache spark Apache Spark中单个作业中的条件迭代

Apache spark Apache Spark中单个作业中的条件迭代,apache-spark,Apache Spark,我正在使用ApacheSpark开发一个迭代算法,该算法声称非常适合这一点。到目前为止,我发现的示例创建了一个具有硬编码迭代次数的单个作业。我需要运行算法,直到满足某个条件 我当前的实现为每个迭代启动一个新作业,如下所示: 这是相当低效的。在每次迭代之间,我都会等待很长时间,等待下一个作业开始。对于四台服务器,我在每个作业之间等待大约10秒,对于32台服务器,等待时间几乎是100秒。总的来说,我至少花了一半的运行时间在两个作业之间等待 我发现条件迭代在某些类型的算法中非常常见,例如机器学习中的

我正在使用ApacheSpark开发一个迭代算法,该算法声称非常适合这一点。到目前为止,我发现的示例创建了一个具有硬编码迭代次数的单个作业。我需要运行算法,直到满足某个条件

我当前的实现为每个迭代启动一个新作业,如下所示:

这是相当低效的。在每次迭代之间,我都会等待很长时间,等待下一个作业开始。对于四台服务器,我在每个作业之间等待大约10秒,对于32台服务器,等待时间几乎是100秒。总的来说,我至少花了一半的运行时间在两个作业之间等待

我发现条件迭代在某些类型的算法中非常常见,例如机器学习中的早期停止标准。所以我希望这能有所改善


有没有更有效的方法?例如,在单个作业中运行此条件重复?谢谢

你能详细说明一下吗?您提供的代码只显示一个包含多个阶段的作业。你是说你在等待
data.filter(…).isEmpty()
,还是这里发生了什么事?当然。我想这就是正在发生的事情:当调用
isEmpty
时,启动一个spark作业,我的代码等待它完成。当该作业完成时,我的代码将继续执行
performStep
,并生成下一个作业(这是第一个作业的扩展)。这将被发送到在下一次
isEmpty
调用中执行的我的从机。当这种情况发生时,没有作业正在运行,我的集群处于空闲状态。您可以通过每10次迭代检查一次来减少等待时间,例如,您的算法是否收敛。据我所知,一般结构确实没有问题。您可以检查
MLlib
,它所做的事情基本相同。我试图重现这个问题()。“昂贵”的版本显示了“等待”的行为,但这看起来像是数据收集的问题。可以详细说明一下吗?您提供的代码只显示一个包含多个阶段的作业。你是说你在等待
data.filter(…).isEmpty()
,还是这里发生了什么事?当然。我想这就是正在发生的事情:当调用
isEmpty
时,启动一个spark作业,我的代码等待它完成。当该作业完成时,我的代码将继续执行
performStep
,并生成下一个作业(这是第一个作业的扩展)。这将被发送到在下一次
isEmpty
调用中执行的我的从机。当这种情况发生时,没有作业正在运行,我的集群处于空闲状态。您可以通过每10次迭代检查一次来减少等待时间,例如,您的算法是否收敛。据我所知,一般结构确实没有问题。您可以检查
MLlib
,它所做的事情基本相同。我试图重现这个问题()。“昂贵”的版本显示了“等待式”行为,但它看起来像是数据收集的问题。
var data = sc.textFile(...).map().cache()
while(data.filter(...).isEmpty()) {
  // Run the Algorithm (also handles caching)
  val data = performStep(data)
}