2017-08-07 28 views
0

考虑这样一种情况类上的RDD选择不同行:如何有效地基于其columns`的一个子集

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

而一个

val rdd: RDD[Prod] 

包含类的实例。

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

有没有任何有效的方法来删除重复?

操作

 rdd.distinct 

会寻找那些被复制整个行

回退将涉及将独特的(productId,date)组合加回到整个行:我正在完成如何执行此操作。但即使如此,这是几个操作。如果存在一个更简单的方法(更快?)。

回答

2

我上Dataset使用dropDuplicates

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 
+0

我也碰到这个运行:看起来像是直接打在这里需要什么。现在尝试它。 – javadba

相关问题