同事们好。我有一个很大的数据集(大约23700000行)。有很多列。例如,我需要删除所有具有列名的重复项 userId
, VTS
.
userId Vts moreColumn1 moreColumn2
10 150 2 3 -delete
11 160 1 6
10 150 0 1 -delete
我不擅长sql。已经尝试了不同的变种从互联网,但它不工作。
更新:
我需要答案!我忘了说我用java。下面是我针对java的优化代码:
viewingDataset.groupBy("userId", "VTS")
.count()
.where("count = 1")
.drop("count")
.join(viewingDataset, JavaConversions.asScalaBuffer(asList("userId", "VTS")))
2条答案
按热度按时间zd287kbt1#
您可以使用窗口功能实现所需的功能:
partitionby将根据作为参数发送的列(您的示例中的userid和vts)按分区计算元素的数量。然后用
where
子句我们将只保留计数为1的分区中的行,即唯一行。partitionby子句的结果
最终结果
disbfnqx2#
您可以使用count进行聚合,过滤结果并重新联接
使用窗口函数可以得到相同的结果,但如果数据倾斜,则鲁棒性较差,平均而言,成本更高。