gpt4 book ai didi

apache-spark - Spark : persist and repartition order

转载 作者:行者123 更新时间:2023-12-04 03:19:51 26 4
gpt4 key购买 nike

我有以下代码:

val data = input.map{... }.persist(StorageLevel.MEMORY_ONLY_SER).repartition(2000)

我想知道如果我先进行重新分区有什么区别:
val data = input.map{... }.repartition(2000).persist(StorageLevel.MEMORY_ONLY_SER)

调用reparation 和persist 的顺序有区别吗?谢谢!

最佳答案

是,有一点不同。

在第一种情况下,您会在映射阶段后获得持久的 RDD。这意味着每次data被访问将触发 repartition .

在第二种情况下,您在重新分区后缓存。当data被访问,并且之前已经被物化,没有额外的工作要做。

为了证明,让我们做一个实验:

import  org.apache.spark.storage.StorageLevel

val data1 = sc.parallelize(1 to 10, 8)
.map(identity)
.persist(StorageLevel.MEMORY_ONLY_SER)
.repartition(2000)
data1.count()

val data2 = sc.parallelize(1 to 10, 8)
.map(identity)
.repartition(2000)
.persist(StorageLevel.MEMORY_ONLY_SER)
data2.count()

并查看存储信息:

sc.getRDDStorageInfo

// Array[org.apache.spark.storage.RDDInfo] = Array(
// RDD "MapPartitionsRDD" (17) StorageLevel:
// StorageLevel(false, true, false, false, 1);
// CachedPartitions: 2000; TotalPartitions: 2000; MemorySize: 8.6 KB;
// ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B,
// RDD "MapPartitionsRDD" (7) StorageLevel:
// StorageLevel(false, true, false, false, 1);
// CachedPartitions: 8; TotalPartitions: 8; MemorySize: 668.0 B;
// ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B)

如您所见,有两个持久化 RDD,一个有 2000 个分区,另一个有 8 个。

关于apache-spark - Spark : persist and repartition order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com