cassandra 基于时间戳过滤RDD

vbkedwbf  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(125)

我有以下代码:-

val imei = "86656"
val date = "2017-04-09"
val gpsdt = "2017-04-09 00:20:10"
val rdd = sc.cassandraTable("test", "xyz").select("id", "date", "dttime").where("id=? and date=?", imei, date)

所以,现在我有rdd,它带来了特定日期的特定imei的整个数据,但我想过滤行,以获得2行的基础上提到的“gpsdt”- 1行只是大于给定的时间和第二行只是小于提到的行?我如何才能实现这一点?
我的Cassandra数据库架构是:-

create table xyz( id text,date text, dttime timestamp,roll text, primary key((id,date),dttime)

谢谢你,

gmxoilav

gmxoilav1#

您可以将RDD分成两个

*1dttime大于gpsdt,按dttime升序排序,take取第一个 *。
*2
其中dttime小于gpsdt,按dttime降序排序,take取第一个 *。

最后,union它们,您应该会得到所需的行

以编程方式

val justGreater = rdd.filter(row => row.get[String]("dttime") > gpsdt).sortBy(row => row.get[String]("dttime")).take(1)
val justLess = rdd.filter(row => row.get[String]("dttime") < gpsdt).sortBy(row => row.get[String]("dttime"), false).take(1)
justGreater.union(justLess)

感谢@Alex Ott指出https://github.com/datastax/spark-cassandra-connector/blob/master/doc/2_loading.md

相关问题