在Spark SQL 中,在SQL 查詢中使用使用者定義函數(UDF) 可能會引入意外行為,尤其是笛卡爾積的出現,而不是預期的完全外部連接。
當使用 UDF 時,Spark 將它們視為任意函數,考慮每種可能的參數組合進行評估。這就需要笛卡爾積來確保對所有對進行徹底檢查。
與UDF 不同,像t1.foo = t2.bar 這樣的基本相等比較具有可預測的行為,從而允許Spark根據相等標準有效地打亂t1 和t2 行。由於 UDF 的不可預測性,這種優化不存在。
在關係代數中,外連接基本上表示為自然連接,它只是一個流行 SQL 引擎的最佳化。因此,重要的是要認識到,在不改變 Spark SQL 引擎本身的情況下,透過 UDF 強制對笛卡爾積進行外連接並不容易實現。
以上是Spark SQL 中的 UDF:為什麼有時會創建笛卡爾積而不是完全外部連接?的詳細內容。更多資訊請關注PHP中文網其他相關文章!