为什么在Spark SQL中无法对列进行'=='比较?

时间:2019-09-05 23:32:01

标签: scala apache-spark-sql comparison

我有一个简单的spark语句,但它似乎返回false,与true的预期结果相反:

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

我尝试了$"a" == lit(1)$"a".equals(1)等,但是都返回了false
$"a" >= 1的语句返回true,为什么不$"a" == 1呢?

2 个答案:

答案 0 :(得分:1)

Scala定义了===运算符,该运算符用作类型安全的equals运算符,与javascript中的运算符非常相似。 Spark框架在Column类中定义了equalTo方法。 equalTo返回一个新的Column对象,该对象具有比较两个列值的结果。 ===运算符使用equalTo方法比较列值。运算符==使用equals方法检查被比较的两个对象是否都引用同一对象。在列类中查看这些方法的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-

答案 1 :(得分:0)

使用三元'='解决了我的问题。

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