В случае, если ваш шаблон неверен. like
эквивалентно SQL, как и использование простого регулярного выражения, поэтому ,
соответствует только литералу ,
.
df = spark.createDataFrame([("[0,2,3]", ), (",", )], ("text", ))
df.withColumn("contains_comma", col("text").like(",")).show()
+-------+--------------+
| text|contains_comma|
+-------+--------------+
|[0,2,3]| false|
| ,| true|
+-------+--------------+
Чтобы получить совпадение, необходимо добавить начальные и конечные символы подстановки:
df.withColumn("contains_comma", col("text").like("%,%")).show()
# +-------+--------------+
# | text|contains_comma|
# +-------+--------------+
# |[0,2,3]| true|
# | ,| true|
# +-------+--------------+
Во втором случае вообще нет проблем. Поскольку вы разбили на ,
, первый элемент будет содержать ведущий [
df.withColumn("contains_comma", split("text", ",\s*")[0]).show()
+-------+--------------+
| text|contains_comma|
+-------+--------------+
|[0,2,3]| [0|
| ,| |
+-------+--------------+
и последний трейлинг ]
. Вы должны удалить их, если вы не хотите, чтобы они выводились, например, используя regexp_replace
:
split(regexp_replace("text", "^\[|\]$", ""), ",")