Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 - Fatal编程技术网

Apache spark 有多少遗嘱执行人会做这项工作?火花

Apache spark 有多少遗嘱执行人会做这项工作?火花,apache-spark,Apache Spark,假设我们有1000个输入文件。 我们正在处理这些文件 我们将num executors设置为200,处理后将结果写入磁盘 我们将num executors设置为200,处理后合并(1)结果并将结果写入磁盘 我们将numexecutors设置为200,在处理缓存结果之后,合并(1)缓存结果并在磁盘上写入 我们将numexecutors设置为200,在处理后将结果持久化到磁盘上,然后合并(1)持久化结果并在磁盘上写入 我们将numexecutors设置为200,在处理之后,我们重新分区(1)结果并将

假设我们有1000个输入文件。 我们正在处理这些文件

  • 我们将num executors设置为200,处理后将结果写入磁盘

  • 我们将num executors设置为200,处理后合并(1)结果并将结果写入磁盘

  • 我们将numexecutors设置为200,在处理缓存结果之后,合并(1)缓存结果并在磁盘上写入

  • 我们将numexecutors设置为200,在处理后将结果持久化到磁盘上,然后合并(1)持久化结果并在磁盘上写入

  • 我们将numexecutors设置为200,在处理之后,我们重新分区(1)结果并将结果写入磁盘

  • 我们将numexecutors设置为200,在处理缓存结果后,我们重新分区(1)缓存结果并在磁盘上写入

  • 我们将numexecutors设置为200,在处理后将结果持久化到磁盘上,然后重新分区(1)持久化结果并在磁盘上写入

  • 有人能解释一下在这种情况下,执行人会做多少工作吗?

    我的经验是,当我尝试使用coalesce(1)将小结果文件折叠成单个结果文件时,所有处理都是由一个执行者完成的,即使我之前缓存了结果(据我所知,这应该会触发一个操作)。所以我做了下面的“黑客”。我将多文件结果写在磁盘上,然后将其读回coalesce(1)并再次写回。 注意:我处理了多TB的数据,结果很小,只有几kb

    我有一种感觉,我错过了某件事,或者做得不对,或者因为合并(1)无论发生什么,都必须由一个执行人来处理?一个合乎逻辑的步骤是结果的金字塔合并


    我用的是Spark 1.6

    你从中得到了什么启示吗?我面临着同样的问题(执行合并(1)时只有一个执行者),spark 2.1.1恰好没有答案。我的问题用我在问题中提到的方法解决了,所以我没有花更多的时间去深入挖掘。但是如果你想知道一些我感兴趣的事情,那么我得出了一个结论——在转换链的末尾运行
    .repartition()
    .coalesce()
    时,它实际上被转换为类似
    。。。一些疑问。。。按键分发
    。所以事实上,重新分配发生在转换之前,造成了你所看到的副作用。因此,我将使用
    .collect()
    ,从收集的数据创建一个新的RDD,然后将其重新分区到单个分区,这与您的解决方案有些类似,但不保存中间文件。