wrs*_*der 3 scala apache-spark apache-spark-sql
如果我尝试这样做,我会收到编译器错误
df.filter($"foo" == lit(0))
Run Code Online (Sandbox Code Playgroud)
忘记了我在 Spark 中需要一个三等号。
但是,如果我这样做,我会得到错误的答案,但没有错误:
df.filter($"foo".between(baz, quux) || $"foo" == lit(0))
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么编译时检查在第一种情况下对我有帮助,但在第二种情况下却没有帮助吗?
因为$"foo" == lit(0)总是被评估为Boolean = false。
因此,在第一种情况下,您尝试filter通过传递布尔值来调用方法,而它需要字符串表达式或列表达式。因此你会得到一个错误。
现在来看第二种情况:
$"foo".between(baz, quux) || $"foo" == lit(0)被评估为:
(((foo >= baz) AND (foo <= quux)) OR false)
Run Code Online (Sandbox Code Playgroud)
||这是被接受的,因为您在列表达式 ( $"foo".between(baz, quux)) 和文字 boolean之间执行 OR 操作false。
换句话说,它被解释为$"foo".between(baz, quux) || lit(false)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |