frame = frame.orderBy(["b","c"],ascending=False)
frame = frame.drop_duplicate('a')
基于Spark Scala代码,我可以看到Orderby
在内部调用sort方法,该方法执行全局排序。
/**
* Returns a new Dataset sorted by the given expressions. For example:
* {{{
* ds.sort($"col1", $"col2".desc)
* }}}
*
* @group typedrel
* @since 2.0.0
*/
@scala.annotation.varargs
def sort(sortExprs: Column*): Dataset[T] = {
sortInternal(global = true, sortExprs)
}
https://github.com/apache/spark/blob/branch-2.4/sql/core/src/main/scala/org/apache/spark/sql/dataset.scala
而且drop_duplicates(cols)方法也按照bellow spark代码转换为聚合(first(cols))。
object ReplaceDeduplicateWithAggregate extends Rule[LogicalPlan] {
def apply(plan: LogicalPlan): LogicalPlan = plan transformUpWithNewOutput {
case d @ Deduplicate(keys, child) if !child.isStreaming =>
val keyExprIds = keys.map(_.exprId)
val aggCols = child.output.map { attr =>
if (keyExprIds.contains(attr.exprId)) {
attr
} else {
Alias(new First(attr).toAggregateExpression(), attr.name)()
}
}
// SPARK-22951: Physical aggregate operators distinguishes global aggregation and grouping
// aggregations by checking the number of grouping keys. The key difference here is that a
// global aggregation always returns at least one row even if there are no input rows. Here
// we append a literal when the grouping key list is empty so that the result aggregate
// operator is properly treated as a grouping aggregation.
val nonemptyKeys = if (keys.isEmpty) Literal(1) :: Nil else keys
val newAgg = Aggregate(nonemptyKeys, aggCols, child)
val attrMapping = d.output.zip(newAgg.output)
newAgg -> attrMapping
}
}
有什么想法为什么?
没有。
按b&c排序,然后按a删除,如果且仅当只有1个分区要处理,就可以按照您的意愿工作。大数据通常不是这样。
因此,您可以在其他地方谷歌:dropduplicates
保留排序操作的第一次出现
--只有在有1个分区的情况下,否则就是运气。
问题内容: 我犯了一个错误,并且有多余的重复项。 我有一个包含4个关键字段的表。,,,。 是自动递增和主键。 的组合,而应该是唯一的,我有我之前创建唯一索引来删除重复的行。有些行有一个重复项,有些行有很多重复项。 向我显示了我需要处理的重复值。但是现在我不知道如何保留一个并删除每个重复集的其余部分。 问题答案: 备份数据,然后… MySQL在DELETE语句中支持JOIN。如果要保留第一个重复项:
删除第一个元素最简单的方法是什么?
我有一个简单的数据库表 我想删除所有按fv和sv分组的重复行。这已经是一个相当流行的问题,有很好的答案。但我需要改变这种情况。当rel\u id为NULL时,我想保留该行。在任何其他情况下,任何事情都会发生。 所以通过使用以下值 任何一个 或 将是有效的结果。其中为 不会。因为第一个条目有作为,它在之上担任主席。 我目前有这个(这是关于基本重复问题的答案)作为删除重复项的查询,但我不确定如何继续修
本文向大家介绍删除一行并在MySQL中使用正确的ID对其他行重新排序?,包括了删除一行并在MySQL中使用正确的ID对其他行重新排序?的使用技巧和注意事项,需要的朋友参考一下 为了理解这个概念,让我们首先创建一个表。创建表的查询如下 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出 首先从表中删除一行,然后使用update命令对其他
这是一个字段,我给它设置了一些映射,比如哪些键是周日和周一,但在db保存后,我得到了周一和周日的顺序,我需要保持在周日周一的顺序下,我该如何处理?即使保存顺序是好的,就像我想要的,但在数据库中,我看到不同的顺序
问题内容: 我有一个如下所示的数据帧 As shown in my screenshot above, my source datframe () contains few NA’s 当我执行“df2.stack()对于H7和H8,我得到了它对应的日期。 我只想在两个值(,)都为空时删除记录 不。 请注意,我这里只有几列,我的真实数据超过了 150列和列名事先未知。 我希望我的输出如下图所示这是不