为什么列上的“==”比较在 Spark SQL 中不起作用?
Why doesn't a '==' comparison on a column work in Spark SQL?
我有一个简单的 spark 语句,但它似乎 return false
与 true
的预期结果相反:
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-
我有一个简单的 spark 语句,但它似乎 return false
与 true
的预期结果相反:
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-