如果我嘗試這個,我會得到一個編譯器錯誤
df.filter($"foo" == lit(0))
忘記了我在 Spark 中需要一個三等號。
但是,如果我這樣做,我會得到錯誤的答案但沒有錯誤:
df.filter($"foo".between(baz, quux) || $"foo" == lit(0))
有人可以解釋為什么編譯時檢查在第一種情況下對我有幫助,而在第二種情況下沒有幫助嗎?
uj5u.com熱心網友回復:
因為$"foo" == lit(0)總是被評估為Boolean = false。
因此,在第一種情況下,您嘗試filter通過傳遞布林值來呼叫方法,而它需要字串運算式或列運算式。因此你得到一個錯誤。
現在在第二種情況下:
$"foo".between(baz, quux) || $"foo" == lit(0) 被評估為:
(((foo >= baz) AND (foo <= quux)) OR false)
這是可以接受的,因為您在||列運算式 ( $"foo".between(baz, quux)) 和文字 boolean之間進行了 OR false。
換句話說,它被解釋為 $"foo".between(baz, quux) || lit(false)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405120.html
標籤:
上一篇:SBT未從根目錄運行
