我正在查看DataFrame API,我可以看到两个不同的方法执行相同的功能,用于从数据集中删除重复项。我可以理解dropDuplicates(colNames)将只考虑列的子集来删除重复项。这两种方法之间还有其他区别吗?
cwdobuhd1#
主要的区别是考虑了列的子集,这很棒!当使用distinct时,你需要一个previous .select来选择你想要应用复制的列,并且返回的Dataframe只包含这些选定的列,而dropDuplicates(colNames)将在根据列删除重复的行后返回初始Dataframe的所有列。
.select
dropDuplicates(colNames)
x3naxklr2#
让我们假设我们有以下的Spark框架
+---+------+---+ | id| name|age| +---+------+---+ | 1|Andrew| 25| | 1|Andrew| 25| | 1|Andrew| 26| | 2| Maria| 30| +---+------+---+
**distinct()**不接受任何参数,这意味着您无法选择删除重复项时需要考虑哪些列。这意味着下面的命令将删除重复的记录,同时考虑到所有的列:
distinct()
df.distinct().show() +---+------+---+ | id| name|age| +---+------+---+ | 1|Andrew| 26| | 2| Maria| 30| | 1|Andrew| 25| +---+------+---+
现在,如果你只考虑id和name,你必须在distinct()之前运行select()。比如说,
id
name
select()
>>> df.select(['id', 'name']).distinct().show() +---+------+ | id| name| +---+------+ | 2| Maria| | 1|Andrew| +---+------+
但是如果你想像上面那样只删除一部分列的重复项,而保留所有列,那么distinct()就不是你的朋友。
**dropDuplicates()**将删除在提供的列集上检测到的重复项,但它也将返回原始列框中出现的所有列。
dropDuplicates()
df.dropDuplicates().show() +---+------+---+ | id| name|age| +---+------+---+ | 1|Andrew| 26| | 2| Maria| 30| | 1|Andrew| 25| +---+------+---+
dropDuplicates()因此更适合当您想要删除选定列子集上的重复项,但也想要保留所有列时:
df.dropDuplicates(['id', 'name']).show() +---+------+---+ | id| name|age| +---+------+---+ | 2| Maria| 30| | 1|Andrew| 25| +---+------+---+
有关详细信息,请参阅文章distinct() vs dropDuplicates() in Python
68bkxrlz3#
在javadoc中,distinc()和dropDuplicates()没有区别。
public DataFrame()返回一个新的DataFrame,其中只包含此DataFrame中的唯一行。这是distinct的别名。dropDuplicates()是在1.4中引入的,作为distinct()的替代,因为您可以使用它的重载方法来基于列的子集获取唯一的行。
7gs2gvoe4#
.distinct()-返回对于所有列组合唯一的行.dropDuplicates()-.distinct()的别名.dropDuplicates(["col1", "col2", ....])-返回对于所提到的列组合唯一的行。即,[“col 1”,“col 2”,....]
.distinct()
.dropDuplicates()
.dropDuplicates(["col1", "col2", ....])
4条答案
按热度按时间cwdobuhd1#
主要的区别是考虑了列的子集,这很棒!当使用distinct时,你需要一个previous
.select
来选择你想要应用复制的列,并且返回的Dataframe只包含这些选定的列,而dropDuplicates(colNames)
将在根据列删除重复的行后返回初始Dataframe的所有列。x3naxklr2#
让我们假设我们有以下的Spark框架
**
distinct()
**不接受任何参数,这意味着您无法选择删除重复项时需要考虑哪些列。这意味着下面的命令将删除重复的记录,同时考虑到所有的列:现在,如果你只考虑
id
和name
,你必须在distinct()
之前运行select()
。比如说,但是如果你想像上面那样只删除一部分列的重复项,而保留所有列,那么
distinct()
就不是你的朋友。**
dropDuplicates()
**将删除在提供的列集上检测到的重复项,但它也将返回原始列框中出现的所有列。dropDuplicates()
因此更适合当您想要删除选定列子集上的重复项,但也想要保留所有列时:有关详细信息,请参阅文章distinct() vs dropDuplicates() in Python
68bkxrlz3#
在javadoc中,distinc()和dropDuplicates()没有区别。
dropDuplicates
public DataFrame()
返回一个新的DataFrame,其中只包含此DataFrame中的唯一行。这是distinct的别名。
dropDuplicates()是在1.4中引入的,作为distinct()的替代,因为您可以使用它的重载方法来基于列的子集获取唯一的行。
7gs2gvoe4#
.distinct()
-返回对于所有列组合唯一的行.dropDuplicates()
-.distinct()
的别名.dropDuplicates(["col1", "col2", ....])
-返回对于所提到的列组合唯一的行。即,[“col 1”,“col 2”,....]