【问题标题】:What is the purpose of cache an RDD in Apache Spark?在 Apache Spark 中缓存 RDD 的目的是什么?
【发布时间】:2016-11-29 15:00:34
【问题描述】:

我是 Apache Spark 的新手,我在阅读 spark 材料时有几个关于 spark 的基本问题,我无法理解。每种材料都有自己的解释方式。我在 Ubuntu 上使用 PySpark Jupyter notebook 来练习。

据我了解,当我运行以下命令时,testfile.csv 中的数据被分区并存储在各个节点的内存中。(实际上我知道它是一个惰性评估,它不会处理,直到它看到动作command ),但概念仍然是

rdd1 = sc.textFile("testfile.csv")

我的问题是当我运行以下转换和操作命令时,rdd2 数据将存储在哪里。

1.它是否存储在内存中?

rdd2 = rdd1.map( lambda x: x.split(",") )

rdd2.count()

我知道 rdd2 中的数据在我关闭 jupyter notebook 之前都是可用的。那么 cache() 的需要是什么,无论如何 rdd2 都可以进行所有转换。听说转换完后内存中的数据都被清空了,这是怎么回事?

  1. 将RDD保存在内存中和cache()有什么区别

    rdd2.cache()

【问题讨论】:

  • 也许有点跑题了,但我遇到了这个线程有一个相关的问题:我的 Pyspark 决定每次 rdd 或 dfs 都在 rdd 中运行内置的 udf,这是由此构建的rdd,被调用。 rdd.cache() 停止了这种行为。更重要的是,udf 从调用 .cache() 的位置开始一次又一次地停止运行。因此,越早检测到 multiple-calling-rdd 或 multiple-calling-df 越好。

标签: caching apache-spark pyspark rdd


【解决方案1】:

它是否存储在内存中?

当您通过 actioncountprintforeach)运行 spark 转换时,只有这样您的图形才会具体化,在您的情况下,文件是被消耗。 RDD.cache 的目的是确保 sc.textFile("testfile.csv") 的结果在内存中可用并且不需要再次读取。

不要将 变量 与在幕后进行的实际操作混淆。缓存允许您重新迭代数据,确保它在内存中(如果有足够的内存来完整地存储它),如果您想重新迭代所述 RDD,并且只要您设置了正确的存储级别(默认为StorageLevel.MEMORY)。 From the documentation(感谢@RockieYang):

此外,每个持久化的 RDD 可以使用不同的 存储级别,例如,允许您将数据集持久保存在 磁盘,将其保存在内存中,但作为序列化的 Java 对象(保存 空间),跨节点复制它,或将其存储在 Tachyon 的堆外。 这些级别通过传递 StorageLevel 对象(Scala、Java、 Python)持久化()。 cache() 方法是使用 默认存储级别,即 StorageLevel.MEMORY_ONLY(存储 内存中的反序列化对象)。

您可以使用 persist() 或 cache() 将 RDD 标记为持久化 方法就可以了。第一次在动作中计算时,它将是 保存在节点上的内存中。 Spark 的缓存是容错的——如果有的话 RDD 的分区丢失,它会自动使用重新计算 最初创建它的转换。


将RDD保存在内存中和cache()有什么区别

如上所述,只要您提供了正确的存储级别,您就可以通过cache将其保存在内存中。否则,它不一定会在您想重复使用时保留在内存中。

【讨论】:

  • 我认为只有在存储级别为 MEMORY_ONLY 时才这样
  • @RockieYang this 指的是什么? RDDs 会被保存在内存中吗?
  • 很高兴。我认为 Spark API 有点误导。 Persist this RDD with the default storage level (MEMORY_ONLY).。我更喜欢Persist this RDD according to storage level configuration, by default is MEMORY_ONLY
  • @RockieYang 创建拉取请求总是受欢迎的 :)
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
相关资源
最近更新 更多