Spark从DataFrame中删除重复行

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特定的操作可以实现此功能呢?
感谢您的帮助,谢谢。

你是如何决定保留哪些c和d值的?如果你想要它们的最大值,那么可以使用类似于df.groupBy("a").max("a", "b", "c")的方法。 - Robert Horvick
我不是在寻找"c"和"d"的最大值,只需要具有最大值("b")的"a"行。 - void
1个回答

9

谢谢!但是程序报了一个异常: 失败:期望“)”但是在OVER(附近找到了“(” - void
似乎您需要升级到1.4(或更高版本) - Marmite Bomber
我正在使用1.6.0版本。当我按照https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-windows.html中的示例操作时,它会给我抛出异常`org.apache.spark.sql.AnalysisException: Could not resolve window function 'row_number'. Note that, using window functions currently requires a HiveContext;`。请注意,使用窗口函数目前需要HiveContext。 - void
常规数据框不支持窗口函数。 - void
支持Hive的自建: http://spark.apache.org/docs/latest/building-spark.html#building-with-hive-and-jdbc-support 或者你可以从这里下载我有时使用的支持Hive的笔记本: http://spark-notebook.io/ - Pankaj Arora
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接