我是否应该缓存统一数据帧?

时间:2019-09-11 10:28:40

标签: scala dataframe apache-spark caching

我不熟悉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.

1 个答案:

答案 0 :(得分:1)

您不需要缓存中间结果,而只缓存最后一个。 可以使用fold代替for循环:

val dfs = DB_List.map(getDF(spark, _))
val result = dfs.reduce(_ union _)