Вот один из способов использования оконной функции.
import org.apache.spark.sql.functions.row_number
import org.apache.spark.sql.expressions.Window
val df = Seq(
("John", "David", "john.david@abc.com", 2222),
("John", "Smith", "john.smith@abc.com", 4444),
("John", "D", "john.david@abc.com", 2222)
).toDF("FirstName", "LastName", "Email", "Phone")
val w = Window.partitionBy($"Email").orderBy($"Phone")
df.withColumn("row", row_number.over(w))
.where($"row" === 1)
.drop("row")
.show(false)
Код разделится по электронной почте, а затем вернет первую строку для каждого раздела.
Выход:
+---------+--------+------------------+-----+
|FirstName|LastName|Email |Phone|
+---------+--------+------------------+-----+
|John |Smith |john.smith@abc.com|4444 |
|John |David |john.david@abc.com|2222 |
+---------+--------+------------------+-----+