我一直在尝试在一个基本Dataframe上进行多个聚合,比如说df1。当我运行以下代码时
df1.cache()
val df2 = df1.groupBy(col("col1"),col("col2") as "col6").agg(sum("col3"))
val df3 = df1.groupBy(col("col1"),col("col4") as "col6").agg(sum("col5"))
val df4 = df2.join(df3,Seq("col1","col6"),"outer")
df4.count()
在生成的查询计划和spark ui的sql选项卡上。我看到df2是df1的内存表扫描,而d1的完整dag是为df3生成而执行的。
当我在执行连接时重命名column1时
df1.cache()
val df2 = df1.groupBy(col("col1") as "col1",col("col2") as "col6").agg(sum("col3"))
val df3 = df1.groupBy(col("col1") as "col1",col("col4") as "col6").agg(sum("col5"))
val df4 = df2.join(df3,Seq("col1","col6"),"outer")
df4.count()
两个df都是内存表扫描。
我不认为这会有什么不同,有人能解释一下为什么会发生这种情况吗。
另外,我还注意到,没有连接查询,两个df的计划都是内存表扫描。
暂无答案!
目前还没有任何答案,快来回答吧!