我正在开发一个作业调度程序,用于实时数据(总共可以达到20-30 M)。我想为所有人维护一个优先级队列,以决定首先发送哪些数据。优先级队列应该能够容纳这么大量的数据。是否可以通过火花将数据保存在订单中。或者还有其他出路吗?
优先级队列只是一个有序的项目列表。使用spark / spark spark sql,您可以从数据框中选择并指定排序顺序和限制(例如,将单个项目出列)。如果要不断查询数据,请确保缓存数据框。
考虑一个名为priority_queue
的spark中的简化表,如下所示:
id | priority | date_added
1 1 3/15/2018 00:00:00
2 2 3/15/2015 00:01:00
...
你可以用val topn = spark.sql("select * from priority_queue order by priority, date_added limit x")
获得前x个项目
然后从topn
和spark.sql("delete from priority_queue where id in (select id from topn)")
创建临时表