返回信息流Spark的.cache()函数是将缓存存到内存中,我总是害怕如果用.cache()会撑爆内存,每次只敢用.persist(StorageLevel.DISK_ONLY)
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #36982同步于 2020/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
什么时候可以放心地用Spark .cache() memory
mengliluohua
2020/8/3镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 byr30205 的大作中提到: 】
: 我记得有个 StorageLevel.MEMORY_AND_DISK ?
这个仍会把一部分缓存到内存中,Spark无法预测未来有多少数据进入内存,还是有因为内存不够崩了的可能
【 在 xxxxzr 的大作中提到: 】
: 用MEMORY_AND_DISK不就行了,DISK_ONLY太慢了
这个仍会把一部分缓存到内存中,Spark无法预测未来有多少数据进入内存,还是有因为内存不够崩了的可能
【 在 mengliluohua 的大作中提到: 】
:
: 学长别调皮
Spark 本身就不是很适合 cache 量级太大的数据,所以也不存在 “放心” 一说。
所以,加资源吧。。。
Spark cache 的内存是自己控制的,是无法预测未来有多少数据进入内存,但是可以控制 cache 使用的内存大小,如果超出这个内存就使用 Disk 来存储数据。摘一段源码:
if (level.useMemory) {
// Put it in memory first, even if it also has useDisk set to true;
// We will drop it to disk later if the memory store can't hold it.
val putSucceeded = if (level.deserialized) {
saveDeserializedValuesToMemoryStore(blockData().toInputStream())
} else {
saveSerializedValuesToMemoryStore(readToByteBuffer())
}
if (!putSucceeded && level.useDisk) {
logWarning(s"Persisting block $blockId to disk instead.")
saveToDiskStore()
}
} else if (level.useDisk) {
saveToDiskStore()
}
【 在 mengliluohua 的大作中提到: 】
:
: 这个仍会把一部分缓存到内存中,Spark无法预测未来有多少数据进入内存,还是有因为内存不够崩了的可能