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

火花中的coalesce(Num分区)是否经过洗牌?

贡威
2023-03-14

我在火花变换函数中有一个简单的问题。

coalesce(numPartitions) - 将 RDD 中的分区数减少到 numPartitions。可用于在筛选大型数据集后更有效地运行操作。

val dataRDD = sc.textFile("/user/cloudera/inputfiles/records.txt")
val filterRDD = dataRDD.filter(record => record.split(0) == "USA")
val resizeRDD = filterRDD.coalesce(50)
val result    = resizeRDD.collect

我的问题是

> < Li > < p > coalesce(num partitions)真的会从filterRDD中删除空分区吗?

coalesce(numPartitions)是否经历了洗牌?

共有1个答案

周浩淼
2023-03-14

coalesce转换用于减少分区的数量。如果输出分区的数量小于输入,则应使用coalesce。它可以根据默认禁用(即假)的洗牌标志触发RDD洗牌。

如果分区的数量大于当前分区的数量,并且您正在使用不带shuffle=true标志的< code>coalesce方法,则分区的数量保持不变。< code>coalesce不保证空分区将被删除。例如,如果您有20个空分区和10个有数据的分区,那么在您调用< code>rdd.coalesce(25)之后,仍然会有空分区。如果在shuffle设置为true的情况下使用< code>coalesce,则这将等效于< code>repartition方法,数据将在分区之间均匀分布。

 类似资料:
  • 如果有人能用简单的术语回答这些与火花洗牌相关的问题,我将不胜感激。 在spark中,当加载一个数据集时,我们指定分区的数量,这表示输入数据(RDD)应该被划分为多少个块,并且根据分区的数量启动相等数量的任务(如果假设错误,请纠正我)。对于工作节点中的X个核心数。一次运行相应的X个任务。 沿着类似的思路,这里有几个问题。 因为,所有byKey操作以及联合、重新分区、连接和共组都会导致数据混乱。 >

  • 我通过指定分区的数量从文本文件创建RDD(Spark 1.6)。但它给我的分区数与指定的分区数不同。 案例1 案例2 案例3 案例4 文件/home/pvikash/data/test的内容。txt是: 这是一个测试文件。将用于rdd分区 基于以上案例,我有几个问题。 对于案例2,显式指定的分区数为0,但实际分区数为1(即使默认最小分区为2),为什么实际分区数为1? 对于案例3,为什么在指定数量的

  • 我在任何地方都找不到如何在RDD内部执行重新分区?我知道您可以在RDD上调用重新分区方法来增加分区数量,但它是如何在内部执行的呢? 假设,最初有5个分区,他们有- 第一个分区 - 100 个元素 第二个分区 - 200 个元素 第 3 个分区 - 500 个元素 第 4 个分区 - 5000 个元素 第 5 分区 - 200 个元素 一些分区是倾斜的,因为它们是从HBase加载的,并且数据没有正确

  • 谁能给我解释一下吗? 然而,另一方面是,对于不能保证产生已知分区的转换,输出RDD将没有分区器集。例如,如果对哈希分区的键/值对RDD调用map(),则传递给map()的函数在理论上可以更改每个元素的键,因此结果将不会有分区器。Spark不会分析函数以检查它们是否保留密钥。相反,它提供了另外两个操作,mapValues()和flatMap Values(),它们保证每个元组的键保持不变。 Mate

  • 我有下面的spark工作,努力把一切都留在记忆中: 然而,当我查看作业跟踪器时,我仍然有很多Shuffle Write和Shuffle spill到磁盘... 然后作业失败,因为...我想知道这里的532.9GB混洗写入,是写入磁盘还是内存?

  • 我有一个spark工作,处理大量数据并将结果写入S3。在处理过程中,我可能有超过5000个分区。在写入S3之前,我想减少分区的数量,因为每个分区都是作为一个文件写入的。 在其他一些情况下,处理过程中可能只有50个分区。如果我想合并而不是因为性能原因重新分区,会发生什么。 从文档来看,它说只有当输出分区的数量少于输入时才应该使用coalesce,但是如果不是,它似乎不会导致错误吗?它会导致数据不正确