我有一項任務是在 2 個表/spark 資料幀中執行視窗聚合(即,根據表 2 中的輸入日期t從表 1 中回顧和聚合tx天)
我目前已經想到了兩種不同的方法來解決這個問題——要么:
- 在視窗聚合之前在 2 個資料幀之間執行
outer join(生成A行) - 在視窗聚合之前在 2 個資料幀之間執行 a
unionByName(生成B行,其中B始終 > A,通常為 ~1.5 - 1.75x)
另外,我目前正在為方法的allowMissingColumns引數使用一種解決unionByName方法,因為我的 spark 版本當前未更新到≥版本 3.1.0。解決方法是基于在執行之前在每個資料框中創建不存在于另一個資料框中的列unionByName(基于此帖子)。
我目前了解 spark 中的連接操作通常效率低下,因為它們往往必須在組合之前對資料集進行排序和打亂,而聯合操作直接組合資料集。但是,在我的場景中,由于 union 方法輸出的資料幀比 join 方法 ( B > A ) 更大,因此在更大的資料集上進行視窗聚合是否會否定更快的 union 方法所帶來的好處,總體而言,join 方法可能更快?(在可擴展性方面)
** PS join 方法還包括一個額外的 dropDuplicates 步驟,用于視窗聚合后的列之一
uj5u.com熱心網友回復:
你的擔心是合法的。但答案將取決于您的資料大小/結構。只有嘗試這兩種方法,您才能確定哪種方法更適合您的情況。對于不同的情況,你會有不同的答案。
乍一看,我會說“Union Window”會更好,另一個(“Join Window dropDuplicates”)包含 2 個額外的資源密集型轉換 - join 和 dropDuplicates。
另外,請注意您的窗戶是否磁區良好。如果他們沒有在更大的(聯合的)資料框中創建傾斜的視窗(一些包含少量的行,而另一些 - 巨大),那么您似乎可以安全地選擇“聯合 視窗”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/514354.html
