我最近开始学习PySpark,我正在try 了解如何返回正则表达式模式在列中的位置,但如果列中不存在正则表达式模式,则返回0.
我在StackOverflow上try 了另一个非常好的答案,它在返回另一个字符串中正则表达式模式开始的位置方面做得很好.https://stackoverflow.com/questions/66121409/locate-function-with-regular-expression-in-spark-sql
然而,在这个答案中,当正则表达式模式不存在于字符串中时,它返回1而不是我需要的0.
根据另一个答案,我试着把它改编如下:
spark.sql("select locate(regexp_extract('0000X00', '([X,Y,Z,W])', 1), '0000X00') as check_pos_string").show()
+----------------+
|check_pos_string|
+----------------+
| 5|
+----------------+
不出所料,它返回位置5,这是正则表达式模式中的字符X出现在它正在判断的字符串中的位置.
但是,当我try 执行以下操作时,即使该模式不存在于它正在判断的字符串中,它也会返回1.
spark.sql("select locate(regexp_extract('0000000', '([X,Y,Z,W])', 1), '0000000') as check_pos_string").show()
+----------------+
|check_pos_string|
+----------------+
| 1|
+----------------+
我想知道如果字符串中不存在正则表达式模式,如何返回0,而不是返回1,如下所示.
+----------------+
|check_pos_string|
+----------------+
| 0|
+----------------+
我有一种感觉,因为我缺乏使用PySpark的经验,所以我误解了一些简单的东西!