如何基于其列的子集在RDD上有效地选择不同的行

时间:2017-08-07 23:44:02

标签: apache-spark apache-spark-sql

考虑案例类:

case class Prod(productId: String, date: String, qty: Int, many other attributes ..)

val rdd: RDD[Prod]

包含该类的许多实例。

唯一键是(productId,date)元组。但是我们确实有一些重复。

是否有任何有效的方法可以删除重复项?

操作

      rdd.distinct

会查找重复的整行

后备将涉及将唯一的(productId,date)组合加入到整行中:我正在研究如何执行此操作。但即便如此,仍有几项行动。如果它存在,一个更简单的方法(也更快?)将是有用的。

1 个答案:

答案 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