caching - 在 Apache Spark 中缓存 RDD 的目的是什么?

标签 caching apache-spark pyspark rdd

我是 Apache Spark 的新手,我在 Spark 中遇到了几个基本问​​题,在阅读 Spark Material 时我无法理解这些问题。每种 Material 都有自己的解释风格。我在 Ubuntu 上使用 PySpark Jupyter 笔记本进行练习。

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

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

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

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

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

rdd2.count()

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

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

    rdd2.cache()

  • 最佳答案

    Does it stores in memory?

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

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

    In addition, each persisted RDD can be stored using a different storage level, allowing you, for example, to persist the dataset on disk, persist it in memory but as serialized Java objects (to save space), replicate it across nodes, or store it off-heap in Tachyon. These levels are set by passing a StorageLevel object (Scala, Java, Python) to persist(). The cache() method is a shorthand for using the default storage level, which is StorageLevel.MEMORY_ONLY (store deserialized objects in memory).

    You can mark an RDD to be persisted using the persist() or cache() methods on it. The first time it is computed in an action, it will be kept in memory on the nodes. Spark’s cache is fault-tolerant – if any partition of an RDD is lost, it will automatically be recomputed using the transformations that originally created it.

    <小时/>

    Is there any difference between keeping RDD in memory and cache()

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

    关于caching - 在 Apache Spark 中缓存 RDD 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38581809/

    相关文章:

    scala - 持久性在Spark中的工作方式

    与 Spark Graphframe bfs 相关的 java.lang.OutOfMemoryError

    javascript - Apache Spark 和 node.js

    python - 导入pyspark ETL模块并使用python子进程作为子进程运行时出错

    android - 如何在位图中缓存表面 View ?

    amazon-web-services - 如何为 AWS API Gateway 设置缓存 key ?

    php - Doctrine 2 结果缓存

    python - 根据 pyspark 中的条件合并 spark 中的两行

    python - 使用 None 值过滤 Pyspark 数据框列

    mysql - 即使在启用低级别缓存后,查询仍然在 Rails 应用程序的 mysql 服务器中记录为慢查询