какой запрос плана данных DataFrame будет работать быстрее - PullRequest
0 голосов
/ 07 февраля 2019

из обоих планов запросов для фрейма данных может кто-нибудь помочь мне понять, какой из них будет работать лучше.

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 голосов
/ 07 февраля 2019

Первый.

  • В первом случае вам нужно только два узких сканирования данных.
  • Во втором случае вам нужно полное сканирование и дополнительное перемешивание.

Таким образом, два фильтра явно являются победителями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...