gpt4 book ai didi

scala - Spark 从 DataFrame 中删除重复行

转载 作者:行者123 更新时间:2023-12-04 22:58:10 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to select the first row of each group?

(9 个回答)


5年前关闭。




假设我有一个 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 特定的操作可以做到这一点?

感谢一些帮助,谢谢。

最佳答案

您可以在 sparksql 中使用窗口函数来实现这一点。

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

这将实现您所需要的。
阅读更多关于窗口函数支持 https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html

关于scala - Spark 从 DataFrame 中删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35498162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com