当前位置: 首页 > 知识库问答 >
问题:

Spark:使用groupBy移除具有不同值的重复行

姜飞飙
2023-03-14

我有一个数据集DS,如下所示:

ds.show():

id1 | id2 | id3 | value  |
1   | 1   | 2   | tom    |
1   | 1   | 2   | tim    |
1   | 3   | 2   | tom    |
1   | 3   | 2   | tom    |
2   | 1   | 2   | mary   |
id1 | id2 | id3 | value  |
1   | 3   | 2   | tom    |
2   | 1   | 2   | mary   |
val df = Seq(
  (1, 1, 2, "tom"),
  (1, 1, 2, "tim"),
  (1, 3, 2, "tom"),
  (1, 3, 2, "tom"),
  (2, 1, 2, "mary")
).toDF("id1", "id2", "id3", "value")

val window = Window.partitionBy("id1", "id2", "id3")

df.distinct().withColumn("count", count("value").over(window))
  .filter($"count" < 2)
  .drop("count")
  .show(false)

共有1个答案

尹小云
2023-03-14

以下是如何使用groupbycountfirst函数来实现

df.distinct()
  .groupBy("id1", "id2", "id3")
  .agg(count("value").as("count"), first("value").as("value"))
  .filter($"count" < 2 )
  .drop("count")
  .show(false)

产出:

+---+---+---+-----+
|id1|id2|id3|value|
+---+---+---+-----+
|1  |3  |2  |tom  |
|2  |1  |2  |mary |
+---+---+---+-----+
 类似资料:
  • 但是它并不像预期的那样工作,因为它将删除所有重复的行。 我想这样做的原因是与另一个数据集联接,而不是在同一个键组有多个名称时从该数据集添加信息

  • 我有一个数据帧重复行除了一个值。我想过滤掉它们,只保留值较高的行。 等等。 因此,例如,需要比较具有skill_a和相同User_ID的行,并且只保留具有最近一年的行。 仅按用户ID提供组的行数。 只给了我一个系列,我无法合并回df。 反对的想法? 谢谢你

  • 问题内容: 我必须清理具有重复行的表: 一个可能具有多个值: 我想对整个表执行一个查询,并删除和重复的所有行。在上面的示例中,删除后,我只想剩下1、2、4和5。 问题答案: ;WITH x AS ( SELECT id, gid, url, rn = ROW_NUMBER() OVER (PARTITION BY gid, url ORDER BY id) FROM dbo.table ) SEL

  • 我有一个对象数组,希望删除所有具有特定键值的对象。 该数组如下所示:

  • Spark-Scala环境中的函数有一些问题。我想在我的DataFrame中添加一个新列,如下所示: 变成: 但是Spark返回给我这个错误: 你能帮我吗?非常感谢!

  • 这是我的数据样本 我编写了以下代码,它删除了所有分类列(例如)。但是,一些非类别列具有值。如何将它们从我的数据集中排除。 当我运行程序时,我得到错误来说太大的值,我认为这是由于值造成的。 问题1-我如何完全删除这些行问题2-这些列的类型是什么,大部分是NO。但两者之间有短信吗?我想我将执行,但这并没有给出结果