gpt4 book ai didi

scala - Spark,多次在 DataFrame(或 RDD)上应用过滤器,无需冗余评估

转载 作者:行者123 更新时间:2023-12-04 11:00:05 25 4
gpt4 key购买 nike

我有一个 Spark DataFrame 需要对父 RDD 的链接进行大量评估。

val df: DataFrame[(String, Any)] = someMethodCalculatingDF()
val out1 = df.filter(_._1 == "Key1").map(_._2).collect()
val out2 = df.filter(_._1 == "Key2").map(_._2)
out1是一个非常小的数据(每个分区中的一两行)并收集以供进一步使用。 out2是一个数据帧,将用于生成另一个稍后将被物化的 RDD。
所以, df将被评估两次,这是沉重的。
Caching可能是一个解决方案,但在我的应用程序中,它不会,因为数据可能真的很大。内存会溢出。

有没有天才:) 谁能提出另一种绕过冗余评估的方法?

最佳答案

这实际上是我们集群中每天都会发生的场景。根据我们的经验,这种方法最适合我们。

当我们需要两次(在不同的分支上)使用相同的计算数据帧时,我们执行以下操作:

  • 计算阶段很繁重,导致数据帧相当小 -> 缓存它。
  • 计算阶段很轻,导致了一个大数据帧 - >让它计算两次。
  • 计算繁重导致大数据帧 -> 将其写入磁盘(HDFS 或 S3)将拆分点上的作业拆分为两个不同的批处理作业。在这种情况下,您不会重复繁重的计算,也不会粉碎缓存(这两种方式都可能使用磁盘)。
  • 计算阶段很轻,导致数据框很小。你的生活很好,你可以回家了:)。
  • 关于scala - Spark,多次在 DataFrame(或 RDD)上应用过滤器,无需冗余评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869344/

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