我有一个关于表格的问题,因为如果有任何帮助那么我是新手。
我有一个包含3列的表格。我使用它的第一列将它作为公共密钥。根据键,我可能会选择多行。我想选择最新时间戳为第2列的行。第3列可以有不同的值。
例如:
Col1 Col2 Col3
some_name 12:5:12 1
some_name 12:6:12 0
some_name1 12:5:12 1
some_name1 12:6:12 0
some_name2 12:5:12 0
some_name2 12:6:12 1
输出:
Col1 Col2 Col3
some_name 12:6:12 0
some_name1 12:6:12 0
some_name2 12:6:12 1
我想在apache spark中这样做。
答案 0 :(得分:1)
在Spark中,我想我会选择row_number()
:
select t.*
from (select t.*, row_number() over (partition by col1 order by col2 desc) as seqnum
from t
) t
where seqnum = 1;
答案 1 :(得分:0)
此查询可能会帮助您
select
*
from table ta
where ta.col2 = (select MAX(col2) from table where col1 = ta.col1)
此查询重新调整col1的最新数据
答案 2 :(得分:0)
Using sparks Window functions
:
val w = Window.partitionBy("col1").orderBy(col("col2").desc)
df.withColumn("latestTS", row_number().over(w))
.where(col("latestTS") === 1)
.drop("latestTS")
.show(false)
+----------+-------+----+
|col1 |col2 |col3|
+----------+-------+----+
|some_name |12:6:12|0 |
|some_name1|12:6:12|0 |
|some_name2|12:6:12|1 |
+----------+-------+----+