当前位置: 首页 > 知识库问答 >
问题:

重新划分后再合并是不可取的

戚鸿福
2023-03-14

我希望在进行计算时加快很多任务,但在写入表时合并成一组较小的分区。

下面给出了一个简单的演示示例,其中在执行过程中不支持重新分区。

我的预期输出是,映射操作发生在100个分区,最后收集发生在只有10个分区。

Spark似乎通过忽略重新分区优化了执行。如果有人能解释一下如何实现我的预期行为,那会很有帮助。

sc.parallelize(range(1,1000)).repartition(100).map(lambda x: x*x).coalesce(10).collect()

共有2个答案

锺离德庸
2023-03-14

"当请求的分区越少(原文如此)时,返回一个新的数据集,该数据集具有确切的数字分区分区。如果请求的分区数量更多,它将保持当前的分区数量。"

https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset@coalesce数据集org.apache.spark.sql.

充昌勋
2023-03-14

使用重新划分有助于实现预期的行为,而不是合并。

sc.parallelize(范围(11000))。再分配(100)。地图(λx:x*x)。缓存()。重新划分(10)。collect()

这有助于解决我的问题。但是,仍然希望对此行为有一个解释。

 类似资料:
  • 如果我想重新分区一个数据帧,如何决定需要做的分区数量?如何决定是使用重新分区还是合并?我知道合并基本上只是为了减少分区的数量。但是我们如何决定在什么情况下使用哪个呢?

  • 问题内容: 如果我的詹金斯管道不是绿色的,我想将我的分支标记为不可合并。 这样做的想法是,如果詹金斯(Jenkins)中该分支的管道不是绿色的,则避免团队中的人将一个分支合并为master。 任何想法都可以在Github网页上使用任何jenkins插件吗?就像我说的那样,如果例如我的分支有一些故障,则不允许单击github页面中该分支的合并按钮。 问候。 问题答案: 对于GitHub上的CI /

  • 首先,当你的手机上有应用程序,并且这个应用程序在play store上有更新时,google只返回更新的部分代码而不是整个包(例如3毫克而不是8毫克,这是整个包的大小)。我研究并发现,在android端,google play提取本地应用程序并合并从play store下载的更新文件,生成新的apk,然后安装新的apk和更新。假设play store没有apk keystore来签署新的apk,但

  • 我有一个新手火花问题。下面是我试图执行的程序: 我试图做的计算(doComput)是昂贵的,因为内存限制,我决定将数据集重新分区为7000个分区(即使我有1200个执行器,所以一次只能执行1200个)。然而,在完成计算后,我尝试写入s3,它大部分工作正常,但很少有任务最终超时,工作被重试。 1) 为什么在我保存在进行昂贵计算后生成的RDD时,整个作业都会被重试? 2) 我试图在持久化之后合并,但s

  • 我读过这些话: 为了使动态规划适用,一个问题必须具有两个关键属性:最优子结构和重叠子问题。如果一个问题可以通过组合非重叠子问题的最优解来解决,那么这个策略就叫做“分而治之”。这也是为什么mergesort和quicksort没有被归类为动态规划问题的原因。 我有三个问题: 为什么合并排序和快速排序不是动态编程? 我认为合并排序也可以将小问题和小问题分开,然后做同样的事情等等。 Dijkstra算法

  • 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创建一个分支。 在这个分支上开展工作。 正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理: 切换到你的线上分支(production branch)。 为这个紧急任务新建一个分支,并在其中修复它。 在测试通过之后,切换回线上