Apache spark 根据值的不同,字符串的强制转换方式也不同

Apache spark 根据值的不同,字符串的强制转换方式也不同,apache-spark,hive,pyspark,Apache Spark,Hive,Pyspark,似乎当一个数字作为字符串小于零时,它被转换为整数,但如果它大于零,则被转换为十进制。为什么会发生这种情况 spark.sql(“选择case when'1.24'>1.23然后选择1 else 0作为测试结束”).show() +----+ |试验| +----+ | 1| +----+ sql(“当'0.24'>0时选择case,然后选择1,否则0作为测试结束”).show() +----+ |试验| +----+ | 0| +----+ 如果您尝试选择case当'0.24'>0.0时

似乎当一个数字作为字符串小于零时,它被转换为整数,但如果它大于零,则被转换为十进制。为什么会发生这种情况

spark.sql(“选择case when'1.24'>1.23然后选择1 else 0作为测试结束”).show()
+----+
|试验|
+----+
|   1|
+----+
sql(“当'0.24'>0时选择case,然后选择1,否则0作为测试结束”).show()
+----+
|试验|
+----+
|   0|
+----+

如果您尝试
选择case当'0.24'>0.0时会发生什么情况,然后选择1或0作为test结束
。这很有道理,同时也很奇怪。谢谢。请尝试
选择'05'>0.01时的大小写,然后选择1或0作为测试结束。
?我认为一切都将被转换为字符串,而不是整数或浮点。奇怪的是,
SELECT'1.23'>1.24',0.24'>0
在HIVE中返回
false,true
@QPSK您可以尝试
spark.sql(“选择'1.23'>1.24',0.24'>0”).show()
(在时不使用
大小写)吗?在spark中,它返回false,false。在蜂巢中,它返回false,true。我想这是一件有火花的事情。对我来说,只使用0.0来处理文本的解决方案已经足够好了。