Eda*_*ame 10 persist partition apache-spark rdd
我有以下代码:
val data = input.map{... }.persist(StorageLevel.MEMORY_ONLY_SER).repartition(2000)
Run Code Online (Sandbox Code Playgroud)
我想知道如果我首先进行重新分配会有什么不同:
val data = input.map{... }.repartition(2000).persist(StorageLevel.MEMORY_ONLY_SER)
Run Code Online (Sandbox Code Playgroud)
呼叫赔偿的顺序是否存在差异并持续存在?谢谢!
zer*_*323 14
是,有一点不同.
在第一种情况下,您会在映射阶段后获得持久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()
Run Code Online (Sandbox Code Playgroud)
并查看存储信息:
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)
Run Code Online (Sandbox Code Playgroud)
如您所见,有两个持久的RDD,一个具有2000个分区,另一个具有8个分区.
| 归档时间: |
|
| 查看次数: |
4872 次 |
| 最近记录: |