2017-01-14 2 views
0

Env: Спарк 1.6, ScalaDataframe записи выдает запрос

Привет
У меня есть записи в Dataframe как сильфон

reportTime    serverNAme  channel  viewer 
2017-01-12 19:16:58.76 MTRL28DSERV722 Channel1 1192 
2017-01-12 19:16:59.213 MTRL28DSERV722 Channel1 668 
2017-01-12 19:17:05.193 BBBN23DSERV000 Channel1 795 
2017-01-12 19:17:01.15 BBBN23DSERV000 Channel1 700 

2017-01-12 19:16:58.76 MTRL28DSERV722 Channel3 100 
2017-01-12 19:16:59.213 MTRL28DSERV722 Channel3 110 
2017-01-12 19:17:05.193 BBBN23DSERV000 Channel3 200 
2017-01-12 19:17:01.15 BBBN23DSERV000 Channel3 50 

мне нужна вывод: последние зрители от каждого сервера, так что канал, что

2017-01-12 19:16:59.213 MTRL28DSERV722 Channel1 668 
2017-01-12 19:17:05.193 BBBN23DSERV000 Channel1 795 


2017-01-12 19:16:59.213 MTRL28DSERV722 Channel3 100 
2017-01-12 19:17:05.193 BBBN23DSERV000 Channel3 200 

Как я могу получить результат? Я не хочу регистрировать DF как соблазнительный и использовать SQL на нем, поскольку SQL не оптимизирован в Spark 1.6.
Благодаря
Хоссейн

ответ

2

Вы можете создать row_number в каждой комбинации severName и channel, в порядке reportTime убывания, а затем использовать where для фильтрации первой строки в пределах каждой группы, которая должна быть один с самым последним reportTime:

import org.apache.spark.sql.expressions.Window 
import org.apache.spark.sql.functions.row_number  
val w = Window.partitionBy($"serverNAme", $"channel").orderBy($"reportTime".desc) 

df.withColumn("rn", row_number.over(w)).where($"rn" === 1).drop($"rn").show 

+--------------------+--------------+--------+------+ 
|   reportTime| serverNAme| channel|viewer| 
+--------------------+--------------+--------+------+ 
|2017-01-12 19:17:...|BBBN23DSERV000|Channel3| 200| 
|2017-01-12 19:16:...|MTRL28DSERV722|Channel3| 110| 
|2017-01-12 19:17:...|BBBN23DSERV000|Channel1| 795| 
|2017-01-12 19:16:...|MTRL28DSERV722|Channel1| 668| 

+--------------------+--------------+--------+------+ 
+0

Уважаем вашу помощь @Psidom. Он работает для меня – Jhon

Смежные вопросы