如何在scala spark dataframe中保留一个特定的行,同时删除所有其他不必要的行?

tpxzln5u  于 2022-11-30  发布在  Apache
关注(0)|答案(1)|浏览(164)

正如标题所示,在scala spark中,如果我有一个如下所示的 Dataframe :

+-------------+----------+
| key         | Time     |
+-------------+----------+
|  1          |        1 |  
|  1          |        2 | 
|  1          |        4 |
|  2          |        2 | 
|  2          |        3 | 
+-------------+----------+

对于同一个key,如何只保留时间最短的key,而丢弃所有其他不必要的行呢?在本例中,对于key 1,它有3行时间不同,最短时间为1,所以我只想保留key 1,time 1行,并丢弃key 1的其他2行。对于key 2,同样,我只想保留key 2,time 2,所以我丢弃key 2。time 3行。key的格式为LongType,time的格式为StringType。是否有某种方法可以实现这一点?

+-------------+----------+
| key         | Time     |
+-------------+----------+
|  1          |        1 |  
|  2          |        2 | 
+-------------+----------+

我试过使用drop或filter功能,但我认为它们不起作用。

eqqqjvef

eqqqjvef1#

尝试类似的东西,我自己的数据在这里当然:

%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|
+---+------+

相关问题