【问题标题】:RDD transformation and actionsRDD 转换和操作
【发布时间】:2017-08-27 18:52:51
【问题描述】:

在对 RDD 进行转换时,例如:-

firstRDD=spark.textFile("hdfs://...") 

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

第一个、第二个和第三个 RDD 是否将值存储在 RAM 中,或者当我们对最后的第三个 RDD 执行操作时,如 result = thirdRDD.count() 然后它会存储数据?

【问题讨论】:

    标签: apache-spark rdd


    【解决方案1】:
    • 在调用count 之前根本没有任何处理。

    • 除了count 所需的恒定内存分配之外,没有任何操作将任何数据存储在内存中。

    • count 期间具体化的行可以立即被丢弃和垃圾收集。

    【讨论】:

    • 好吧,这意味着 firstRDD=spark.textFile("hdfs://...") 不会将文本文件存储在 RAM 中??这意味着在转换中没有内存读/写?在转换期间,它应该存储运算符函数对吗?
    • In-Memory,即 RDD 中的数据尽可能多(大小)和长(时间)地存储在内存中。这里是说 RDD 数据驻留在 RAM 中。
    【解决方案2】:

    在任何情况下,RDD 只会在链中调用某个动作时才加载值。在这种情况下,它只会在执行计数操作时加载值,并且只会加载数据,直到指定“过滤器”函数内部指定的条件。

    它不会加载数据并将其保存在内存中。如果您在一个 RDD 上调用方法,它可以持久化。否则,下次操作任何动作时,它都会从头开始加载数据。

    如果有帮助请告诉我。

    【讨论】:

    • 好吧,这意味着 firstRDD=spark.textFile("hdfs://...") 会将文本文件存储在 RAM 中??
    • 如果你不在firstRdd上调用persist,它不会在RAM中存储文本文件
    • 好的,谢谢 :) 你知道 spark Standalone 是如何管理容错的吗?
    • 我也是 spark 的新手并正在学习它;)但是,我无法解释 spark 如何在集群内部管理容错,但我可以告诉您 spark 存储所有对图形结构中的任何 RDD 执行的转换。如果任何节点失败,那么它会从该图中重新计算 RDD
    猜你喜欢
    • 2016-02-10
    • 2015-09-02
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2020-11-29
    • 2016-01-07
    相关资源
    最近更新 更多