就像标题一样,在scala spark中,如果我有一个像下面这样的数据框架:
+-------------+----------+
| key | Time |
+-------------+----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 2 | 2 |
| 2 | 3 |
+-------------+----------+
对于相同的键,我如何只保留时间最少的键,而删除所有不需要的行?在这种情况下,对于键1,它有3行不同的时间,最小的时间是1,所以我只想保留键1,时间为1,然后删除键1的其他2行。键2也是一样,我只想保留键2,乘以2,所以我去掉键2,乘以3行。key的格式为LongType, time的格式为StringType。是否有办法做到这一点?
+-------------+----------+
| key | Time |
+-------------+----------+
| 1 | 1 |
| 2 | 2 |
+-------------+----------+
我试过使用删除或过滤功能,但我认为它们不起作用。
试试类似的东西,当然是我自己的数据:
%scala
import spark.implicits._
import org.apache.spark.sql.functions._
val df = sc.parallelize(Seq( (1,7), (1,8), (1,9), (2,2), (2,99) )).toDF("i", "c")
df.groupBy($"i").agg(min($"c")).show()
的回报:
+---+------+
| i|min(c)|
+---+------+
| 1| 7|
| 2| 2|
+---+------+