【问题标题】:Caching intermediate result Spark缓存中间结果 Spark
【发布时间】:2018-04-04 18:04:35
【问题描述】:

我以 RDD 的形式从数据库中读取一堆记录并执行不同的操作。我了解Spark会在转换后自动释放中间RDD数据。它会再读一遍 从源头看,如果我们在程序的后半部分提到中间RDD。这是否意味着它将再次从数据库中读取数据?无论如何,有什么工具可以告诉我们应该缓存哪个中间结果以获得更好的结果?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    Spark 被延迟评估,transformations(及其输出)不会实现,直到在DAG 中遇到操作。甚至persist/cache 也不是action,他们也很懒。

    如果你的 DAG 中有一个 action 直到现在(你想要访问中间 RDD 的点),再加上你在中间 RDD 之前有一个 persist/cache,spark 将只从那个动作/缓存点重新计算。否则它将再次从数据库中读取。如果您没有任何操作,并且绝对想阻止再次读取数据库,您可以使用saveAsTextFile() 并再次读取。

    【讨论】:

    • 谢谢...它帮助我重新访问代码库以提高性能。
    • 一个问题,如果我通过从另一个 RDD 中选择几行来生成中间 RDD,我仍然应该缓存它吗?或者只有当我从数据库/文件/或任何外部源读取数据时才需要?
    • 你打算再次使用哪个RDD:是你过滤的RDD还是你过滤后的RDD?
    • 我将使用新创建的(过滤的 RDD)。
    • 如果 P 是父 RDD 并且您执行转换:T1) 将一列添加到 P T2) 在 P 上爆炸 T3) 将列添加到 P T4) 添加列到 T2 的结果。 T5) 在 T2 的结果中爆炸。请注意,您使用P 3 次& 转换结果T2 2 次和T2 来自P。你显然需要坚持P。现在你应该坚持T2?,这取决于多个因素:1)如果你可以同时在内存中保存P&T2,也坚持T2。 2)如果您没有足够的内存或T4 & T5 不是那么耗时,请不要坚持下去。请记住 T2 spark 将从 P 开始而不是从开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2020-06-29
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多