【发布时间】:2020-03-11 03:41:02
【问题描述】:
我有一个 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 是一个 Dataframe,将用于生成另一个 RDD,稍后将具体化。
因此,df 将被评估两次,这很重。
Caching 可能是一个解决方案,但在我的应用程序中,它不会是,因为数据可能真的非常大。内存会溢出。
有没有天才 :) 谁能提出另一种绕过冗余评估的方法?
【问题讨论】:
-
你能在
someMethodCalculatingDF之前做过滤吗?您仍然会运行该方法两次,但数据量会有所不同(计算out1时会少很多)。 -
不.. 不幸的是.. T^T
标签: scala apache-spark lazy-evaluation