为什么列上的“==”比较在 Spark SQL 中不起作用?

Why doesn't a '==' comparison on a column work in Spark SQL?

我有一个简单的 spark 语句,但它似乎 return falsetrue 的预期结果相反:

spark.sql("SELECT 1 AS a").withColumn("b", lit($"a" == 1)).show
+---+-----+
|  a|    b|
+---+-----+
|  1|false|
+---+-----+

我已经尝试了 $"a" == lit(1)$"a".equals(1) 等,但都 return false.
$"a" >= 1 returns true 的声明为什么不 $"a" == 1?

使用三重“=”解决了我的问题。

spark.sql("SELECT 1 AS a").withColumn("b", $"a" === 1).show
+---+----+
|  a|   b|
+---+----+
|  1|true|
+---+----+

Scala 已经定义了 === 运算符作为类型安全的等于运算符,与 javascript 中的运算符非常相似。 Spark 框架在 Column class 中定义了 equalTo 方法。 equalTo returns 一个新的 Column 对象,它具有比较两个列值的结果。 === 运算符使用 equalTo 方法来比较列值。运算符 == 使用 equals 方法检查被比较的两个对象是否引用同一个对象。在 class:

列中查看这些方法的 spark API 文档

https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/Column.html#equalTo-java.lang.Object- https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/Column.html#equals-java.lang.Object-