Наиболее простым решением было бы разбить предложение на массив слов, отсортировать массив и затем отбросить дубликаты в зависимости от этого нового столбца.
В Spark 2.4.0 + это можно сделать, используя array_sort
и split
следующим образом:
df.withColumn("arr", array_sort(split($"words", " ")))
.dropDuplicates("arr")
Новый столбец arr
можно удалить с помощью .drop(arr)
, еслитребуемый.
Используя более старую версию Spark или если необходимо использовать более сложную логику (например, рассмотрите только два словосочетания для обратного сбрасывания),UDF
необходимо использовать.Например, чтобы рассмотреть только два словосочетания, мы можем использовать:
val sort_udf = udf((arr: Seq[String]) => {
if (arr.size == 2) arr.sorted else arr
})
df.withColumn("arr", sort_udf(split($"words", " ")))
.dropDuplicates("arr")