如何仅考虑列的子集来删除重复项?
How to drop duplicates considering only subset of columns?
我使用 Spark 1.6 并在两个数据帧上进行内部连接,如下所示:
val filtergroup = metric
.join(filtercndtns, Seq("aggrgn_filter_group_id"), inner)
.distinct()
但我一直在 aggrgn_filter_group_id
列中得到重复值。你能提出一些解决方案吗?
Spark < 2.0
考虑 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")
价格是用 distinct
和 join
执行额外的 select
,但应该会给你预期的结果。
Spark >= 2.0
以下解决方案仅适用于支持 dropDuplicates
运算符的 Spark 2.0+,并允许仅考虑列的子集来删除重复项。
引用 documentation:
distinct(): Dataset[T]
Returns a new Dataset that contains only the unique rows from this Dataset. This is an alias for dropDuplicates
.
distinct
或 dropDuplicates
只需删除比较每一列的重复行。
如果您对特定列感兴趣,您应该使用 dropDuplicates
之一,例如
val filtergroup = metric
.join(filtercndtns, Seq("aggrgn_filter_group_id"), "inner")
.dropDuplicates("aggrgn_filter_group_id")
当您指定一列或一组列时,dropDuplicates
returns 删除了重复行的新数据集,仅考虑列的子集。
我使用 Spark 1.6 并在两个数据帧上进行内部连接,如下所示:
val filtergroup = metric
.join(filtercndtns, Seq("aggrgn_filter_group_id"), inner)
.distinct()
但我一直在 aggrgn_filter_group_id
列中得到重复值。你能提出一些解决方案吗?
Spark < 2.0
考虑 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")
价格是用 distinct
和 join
执行额外的 select
,但应该会给你预期的结果。
Spark >= 2.0
以下解决方案仅适用于支持 dropDuplicates
运算符的 Spark 2.0+,并允许仅考虑列的子集来删除重复项。
引用 documentation:
distinct(): Dataset[T] Returns a new Dataset that contains only the unique rows from this Dataset. This is an alias for
dropDuplicates
.
distinct
或 dropDuplicates
只需删除比较每一列的重复行。
如果您对特定列感兴趣,您应该使用 dropDuplicates
之一,例如
val filtergroup = metric
.join(filtercndtns, Seq("aggrgn_filter_group_id"), "inner")
.dropDuplicates("aggrgn_filter_group_id")
当您指定一列或一组列时,dropDuplicates
returns 删除了重复行的新数据集,仅考虑列的子集。