首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除两个重复的行

删除两个重复的行
EN

Stack Overflow用户
提问于 2018-07-04 14:53:06
回答 2查看 226关注 0票数 1

同事们,今天好。我有一个很大的数据集(大约237000行)。有很多专栏。例如,我需要删除列名为userIdVTS的所有重复项。

代码语言:javascript
复制
userId Vts moreColumn1 moreColumn2
10     150     2           3              -delete
11     160     1           6
10     150     0           1              -delete

我对SQL不好。曾经尝试过与互联网不同的变体,但它不起作用。

更新:

泰伊想要答案!我忘了说我使用java。这是我为java优化的代码:

代码语言:javascript
复制
viewingDataset.groupBy("userId", "VTS")
                .count()
                .where("count = 1")
                .drop("count")
                .join(viewingDataset, JavaConversions.asScalaBuffer(asList("userId", "VTS")))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-04 15:07:11

您可以使用计数进行聚合,过滤结果并返回。

代码语言:javascript
复制
df.groupBy("userId", "Vts").count
  .where($"count" === 1)
  .drop("count")
  .join(df, Seq("userId", "Vts"))

窗口函数有可能得到同样的结果,但如果数据倾斜,而且平均花费要高得多,那么它的鲁棒性就会降低。

票数 3
EN

Stack Overflow用户

发布于 2018-07-04 15:16:15

您可以使用窗口功能实现您想要的结果:

代码语言:javascript
复制
import org.apache.spark.sql.expressions.Window._

ds.withColumn("aux", count("*")
.over(Window.partitionBy($"userId", $"VTS")))
.where($"aux"===1)
.drop($"aux")

partitionBy将根据作为参数发送的列(在示例中为userId和VTS ),按分区计算多少个元素。然后,使用where子句,我们将只保留计数为1的分区中的行,即唯一的行。

partitionBY子句的结果

代码语言:javascript
复制
ds.withColumn("aux", count("*").over(Window.partitionBy($"userId", $"VTS"))).show

+-------+----+------------+------------+---+
| userId| VTS| moreColumn1| moreColumn2|aux|
+-------+----+------------+------------+---+
|     10| 150|           2|           3|  2|
|     10| 150|           0|           1|  2|
|     11| 160|           1|           6|  1|
+-------+----+------------+------------+---+

最终结果

代码语言:javascript
复制
+-------+----+------------+------------+
| userId| VTS| moreColumn1| moreColumn2|
+-------+----+------------+------------+
|     11| 160|           1|           6|
+-------+----+------------+------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51176408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档