我有一个简单的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
呢?
答案 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|
+---+----+