Если я не понял вашу проблему, существуют стандартные функции, которые могут вам помочь (поэтому вам не нужно писать UDF), то есть split
и array_intersect
.
С учетом следующего набора данных:
val df = Seq(("Author1,Author2,Author3","Author2,Author3"))
.toDF("source","target")
scala> df.show(false)
+-----------------------+---------------+
|source |target |
+-----------------------+---------------+
|Author1,Author2,Author3|Author2,Author3|
+-----------------------+---------------+
Вы можете написать следующий структурированный запрос:
val intersect = array_intersect(split('source, ","), split('target, ","))
val solution = df.select(intersect as "common_elements")
scala> solution.show(false)
+------------------+
|common_elements |
+------------------+
|[Author2, Author3]|
+------------------+