我有一个DataFrame,DataFrame有两列‘Value’和‘Timestamp’,‘timestmp’是有序的,我想获得DataFrame的最后一行,我应该怎么办?
这是我的意见:
+-----+---------+
|value|timestamp|
+-----+---------+
| 1| 1|
| 4| 2|
| 3| 3|
| 2| 4|
| 5| 5|
| 7| 6|
| 3| 7|
| 5| 8|
| 4| 9|
| 18| 10|
+-----+---------+
这是我的代码:
val arr = Array((1,1),(4,2),(3,3),(2,4),(5,5),(7,6),(3,7),(5,8),(4,9),(18,10))
var df=m_sparkCtx.parallelize(arr).toDF("value","timestamp")
这是我预期的结果:
+-----+---------+
|value|timestamp|
+-----+---------+
| 18| 10|
+-----+---------+
7条答案
按热度按时间kmbjn2e31#
试试这个,它对我很管用。
nmpmafwu2#
我将简单地使用这样的查询-按降序对表进行排序-从该顺序中获取第一个值
uoifb46i3#
我只需
reduce
:siotufzp4#
最有效的方法是
reduce
您的DataFrame。这为您提供了可以转换回DataFrame的单行,但由于它只包含1条记录,这没有多大意义。效率较低(因为它需要重新洗牌),尽管此解决方案较短:
alen0pnh5#
如果您的时间戳列是唯一的并且按递增顺序排列,则有以下方法可以获取最后一行
产出:
如果不是,则使用该索引创建一个新列并选择最后一个索引,如下所示
产出:
imzjd6km6#
Java:
gzjq41n47#
您还可以使用函数desc:
Column desc(String columnName)
它产生的结果与