哪个火花数据框架计划查询将更快地工作

时间:2019-02-07 12:46:05

标签: scala apache-spark

这两个数据框查询计划中的任何人都可以帮助我了解哪种效果更好。

1个数据框:

    val df =  data.filter((col("regionId") < 0))    
    val dfn = data.filter(not(col("regionId") < 0))    
    val dff = df.union(dfn)    

    Optimized Plan:

    Union
    :- Project [regionId#3044L]    
    :  +- Filter (isnotnull(regionId#3044L) && (regionId#3044L < 0))    
    :     +- Relation[regionId#3044Ltimestamp#3046L] parquet    
    +- Project [regionId#3044L]    
       +- Filter (isnotnull(regionId#3044L) && (regionId#3044L >= 0))    
          +- Relation[regionId#3044Ltimestamp#3046L] parquet    

2个数据框:

    val df =  data.filter((col("regionId") < 0))    
    val dfn = data.except(df)    
    val dff = df.union(dfn)    

    Optimized Plan:

    Union
    :- Project [regionId#3044L]    
    :  +- Filter (isnotnull(regionId#3044L) && (regionId#3044L < 0))
    :     +- Relation[regionId#3044Ltimestamp#3046L] parquet
    +- Aggregate [regionId#3044L], [regionId#3044L]    
       +- Join LeftAnti, (regionId#3044L <=> regionId#3174L)    
          :- Project [regionId#3044L]      
          :  +- Relation[regionId#3044L,timestamp#3046L] parquet     
          +- Project [regionId#3174L]          
             +- Filter (isnotnull(regionId#3174L) && (regionId#3174L < 0))       
                +- Relation[regionId#3174L,timestamp#3176L] parquet         

1 个答案:

答案 0 :(得分:0)

前一个。

  • 在第一种情况下,您只需要对数据进行两次窄扫描。
  • 在第二种情况下,您需要全面扫描和其他随机播放。

因此,这两个过滤器显然是赢家。