火花
考虑 distinct 对包含要删除重复项的列的数据集,然后在列上进行内部连接。
// don't use distinct yet
val filtergroup = metric
.join(filtercndtns, Seq("aggrgn_filter_group_id"), "inner")
// take unique aggrgn_filter_group_ids
val uniqueFilterGroups = filtergroup
.select("aggrgn_filter_group_id")
.distinct
// Inner join to remove duplicates from the source dataset
filtergroup.join(uniqueFilterGroups, Seq("aggrgn_filter_group_id"), "inner")
代价是执行一个额外的select 和distinct 和join,但应该会给你预期的结果。
火花 >= 2.0
以下解决方案仅适用于支持 dropDuplicates 运算符的 Spark 2.0+,并允许仅考虑列的子集删除重复项。
引用documentation:
distinct():数据集[T]
返回一个仅包含此数据集中唯一行的新数据集。这是dropDuplicates 的别名。
distinct 或 dropDuplicates 只需删除比较每一列的重复行。
如果您对特定列感兴趣,您应该使用dropDuplicates 之一,例如
val filtergroup = metric
.join(filtercndtns, Seq("aggrgn_filter_group_id"), "inner")
.dropDuplicates("aggrgn_filter_group_id")
当您指定一列或一组列时,dropDuplicates 返回一个删除重复行的新数据集,仅考虑列的子集。