gpt4 book ai didi

apache-spark - persist(DISK_ONLY) 与手动保存到 HDFS 和回读之间的区别

转载 作者:行者123 更新时间:2023-12-05 03:48:22 25 4
gpt4 key购买 nike

这个答案清楚地解释了 RDD persist() 和 cache() 及其必要性 - (Why) do we need to call cache or persist on a RDD

所以,我知道调用 someRdd.persist(DISK_ONLY) 是惰性的,但是 someRdd.saveAsTextFile("path") 是急切的。

但除此之外(也忽略手动清理存储在 HDFS 中的文本文件),使用 persist 将 rdd 缓存到磁盘与手动从磁盘写入和读取之间是否有任何其他差异(性能或其他方面)?有理由偏爱其中之一吗?

更多上下文:我遇到了手动写入 HDFS 并在我们的生产应用程序中读回的代码。我刚开始学习 Spark,想知道是否可以用 persist(DISK_ONLY) 代替它。请注意,HDFS 中保存的 rdd 在作业的每次新运行之前都会被删除,并且此存储的数据不会在运行之间用于其他任何事情。

最佳答案

至少这些差异:

  • 写入 HDFS 将产生副本开销,而缓存则在本地执行器上写入(如果选择了 DISK_ONLY_2,则写入第二个副本)。
  • 写入 HDFS 是持久的,而如果/当执行者因任何原因被杀死时,缓存数据可能会丢失。您已经提到了在整个应用程序出现故障时写入 HDFS 的好处。
  • 缓存不会改变分区,但从 HDFS 读取可能/将导致与原始写入的 DataFrame/RDD 不同的分区。例如,小的分区(文件)会被聚合,大的文件会被拆分。

我通常更喜欢缓存评估成本高昂的中小型数据集,并将较大的数据集写入 HDFS。

关于apache-spark - persist(DISK_ONLY) 与手动保存到 HDFS 和回读之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64439152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com