假设,我有一个数据帧象下面这样:如何根据spark数据框中的某些列过滤掉重复的行?
在这里,你可以看到,事务处理编号1,2和3具有相同的值用于列A,B,C,但对于列d不同的值和E. E列有日期条目。
- 对于相同的A,B和C组合(A = 1,B = 1,C = 1),我们有3行。基于E列的最近交易日期,我想只取一行表示具有最近日期的行。但对于最近的日期,有2个交易。但是,如果在A列中找到A,B,C和最近日期的相同组合的两个或更多行,我想只取其中一个。 因此,我对该组合的预期产出将为行编号3或4 (任何人都会这样做)。
- 对于相同的A,B和C组合(A = 2,B = 2,C = 2),我们有2行。但是根据列E,最近的日期是行号5的日期。因此,我们将这一行作为A,B和C的这种组合。 因此,我对该组合的预期输出将是行号
所以最终的输出将是(3和5)或(4和5)。
现在我应该怎么处理方法:
- 我这样说的:
两个reduceByKey和groupByKey可用于同一目的,但 reduceByKey工作在一个大的要好得多数据集。这是因为在 混洗数据之前,Spark 知道它可以将输出与每个分区上的公用密钥组合在一起。
- 我试图与GROUPBY上的列A,B,C和最大上柱E.但它不能给我的行的头,如果存在的多行同一日期。
什么是最优化的方法来解决这个问题?提前致谢。
编辑:我需要找回我过滤的交易。如何做到这一点呢?
什么版本的火花您使用的是? – eliasah
方法2更好。函数“max”总是会返回一个最大日期。如果存在多个这样的日期,则只会选择一个。 – pasha701
我正在使用spark-2.1.0版本 –