考虑案例类:
case class Prod(productId: String, date: String, qty: Int, many other attributes ..)
和
val rdd: RDD[Prod]
包含该类的许多实例。
唯一键是(productId,date)
元组。但是我们确实有一些重复。
是否有任何有效的方法可以删除重复项?
操作
rdd.distinct
会查找重复的整行。
后备将涉及将唯一的(productId,date)
组合加入到整行中:我正在研究如何执行此操作。但即便如此,仍有几项行动。如果它存在,一个更简单的方法(也更快?)将是有用的。
答案 0 :(得分:2)
我在dropDuplicates
使用Dataset
:
val rdd = sc.parallelize(Seq(
Prod("foo", "2010-01-02", 1), Prod("foo", "2010-01-02", 2)
))
rdd.toDS.dropDuplicates("productId", "date")
但reduceByKey
也应该有效:
rdd.keyBy(prod => (prod.productId, prod.date)).reduceByKey((x, _) => x).values