記錄Spark 笛卡爾積問題


因為要上線一個需求,有改到spark sql。 在改之前我一般習慣把生產原邏輯跑一邊理解下(需求趕,都是邊讀業務邊寫)

但奇怪的是,在生產上已經跑了24個賬期的代碼,拉到自己環境跑卻報了 兩者的版本都是2.X

Detected cartesian product for INNER join between logical plans的錯誤。

這個錯誤很明顯,笛卡爾積。

國內所有的解決方案都是抄襲的 

設置 配置 spark.conf.set("spark.sql.crossJoin.enabled", "true") 這個在2.X是默認關閉的。

但是!我去生產上spark.conf.get("spark.sql.crossJoin.enabled") 一下,得到的結果是false, 說明生產上也是沒開啟的。而且開啟這個在許多情況下是不建議的,極度消耗性能。

於是我就跑去外面問問老外是怎么解決了。

 

 很顯然,這位老兄遇到了和我同樣的問題。

 

 REPORT_X 都是列僅包含單個值,優化器此時無法推斷連接列僅包含單個值,並將嘗試應用散列或排序合並連接。

說明正常情況下,這串代碼理應報笛卡爾積連接問題。但是為什么生產上沒有呢。

我就想到了是否是版本問題。結果一查!正是!

 

剛好因為版本的問題,雖然在1.X默認開啟,2.X默認關閉,但是2.X之間似乎還說會有細微的差別。 

至此,問題解決。暫定是版本問題。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM