我不熟悉Spark中的缓存。
我需要在循环内执行多个DF联合。每个联合会增加几百万行。我应该在每次联合之后df.cache我的结果吗?
var DB_List = List ("Database1", "Database2", "Database3", "Database4", "Database5", "Database6", "Database7", "Database8", "Database9", "Database10")
var df = getDF(spark, DB_List(0)) // this returns a DF.
for(i <- 1 until DB_List.length){
df = df.union(getDF(spark, DB_List(i)))
//df.cache or not?
}
//Here, I use df.repartition(1) to write resulted DF in a CSV file.
答案 0 :(得分:1)
您不需要缓存中间结果,而只缓存最后一个。 可以使用fold代替for循环:
val dfs = DB_List.map(getDF(spark, _))
val result = dfs.reduce(_ union _)