Spark 从 DataFrame 中删除重复行

Spark remove duplicate rows from DataFrame

假设我有一个像这样的 DataFrame:

val json = sc.parallelize(Seq("""{"a":1, "b":2, "c":22, "d":34}""","""{"a":3, "b":9, "c":22, "d":12}""","""{"a":1, "b":4, "c":23, "d":12}"""))
val df = sqlContext.read.json(json)

我想根据列 "b" 的值删除列 "a" 的重复行。即,如果 "a" 列有重复行,我想保留 "b" 值较大的行。对于上面的例子,经过处理后,我只需要

{"a":3, "b":9, "c":22, "d":12}

{"a":1, "b":4, "c":23, "d":12}

Spark DataFrame dropDuplicates API 似乎不支持这个。使用 RDD 方法,我可以做一个 map().reduceByKey(),但是有什么 DataFrame 特定操作可以做到这一点?

感谢一些帮助,谢谢。

可以使用spark sql中的window函数来实现。

df.registerTempTable("x")
sqlContext.sql("SELECT a, b,c,d  FROM( SELECT *, ROW_NUMBER()OVER(PARTITION BY a ORDER BY b DESC) rn FROM x) y WHERE rn = 1").collect

这将实现您所需要的。 详细了解 Window 函数支持 https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html