Вы можете использовать функцию regexp_extract
для фильтрации и подсчета строк. Например:
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
private val session: SparkSession = ...
import session.implicits._
val myDataFrame = Seq(
(1L, "abc"),
(2L, "def"),
(3L, "a[CS_RES]b"),
(4L, "adg")
).toDF("id", "text")
val resultRegex = myDataFrame.where(regexp_extract($"text", "\\[CS_RES\\]", 0).notEqual("")).count()
println(resultRegex) // outputs 1
Идея такова: если первая группа (i = 0), возвращаемая regexp_extract
, не является пустой строкой, подстрока найдена. Вызов count()
возвращает общее количество этих строк.
Но если вам нужно найти только точные совпадения подстрок, решение можно упростить с помощью функции locate
:
val resultLocate = myDataFrame.where(locate("[CS_RES]", $"text") > 0).count()
println(resultLocate) // outputs 1