UDF 和笛卡爾積
理解問題
在Spark SQL 中,使用自「定義User - SQL 查詢中的定義函數(UDF) 有時會導致笛卡爾積計算預期的完全外連接。出現此效能問題的原因是 UDF 的使用引入了任意且不確定的函數,使得最佳化器在不評估所有可能的輸入組合的情況下確定其值具有挑戰性。
解
與 UDF 不同,完全外連接 (t1.foo = t2.bar) 中的簡單相等條件具有可預測的行為。優化器可以分別根據 foo 和 bar 打亂 t1 和 t2 行,以高效計算連接。
防止笛卡爾積
缺少修改 Spark SQL引擎中,沒有直接的方法可以強制對 UDF 引入的笛卡爾積進行外部聯接。這種限制源自於 UDF 的固有性質,它需要評估所有可能的參數組合以確定它們的值。
以上是為什麼 Spark SQL UDF 有時會導致笛卡爾積而不是外部連接?的詳細內容。更多資訊請關注PHP中文網其他相關文章!