2017-04-03 123 views
1

我有一个火花RDD本质上是(时间戳,id),其中时间戳是joda DateTime的形式为yyyy/MM/dd HH:mm。 RDD具有阶级性;过滤RDD的日期joda/scala/spark

case class myRDD(timestamp: org.joda.time.DateTime, id: String) 

我正在使用Spark和Scala。

我想过滤数据只有一个特定的日期,即2000/01/01,并返回形式(timestamp,id)的东西,但我不确定如何使用filter()与joda时间戳。我已经创建了我想要按以下过滤的时间间隔的开始和结束;

val start = myFormat.parseDateTime("2000/01/01 00:00") 
val end = myFormat.parseDateTime("2000/01/02 00:00”) 

但我不知道如何将其应用于RDD,或者即使这是解决此问题的最佳方法。任何提示将非常感谢。

+1

是时间戳的字符串或乔达日期时间? – soote

+0

@soote时间戳是一个joda DateTime,我创建的类是窗体; 'case class rdd(timestamp:org.joda.time.DateTime,id:String)' – ellaf

回答

1

对于仅有1天:

rdd.filter((timestamp, id) => 
    timestamp.withTimeAtStartOfDay.equals(dayYouWant.withtimeAtStartOfDay)) 

对于天数范围:

rdd.filter((timestamp, id) => 
    new Interval(start, end).contains(timestamp)) 
+0

谢谢你的帮助!我一直在修改你所建议的代码,但我仍然接受错误,主要是;错误:错误的参数数量;预计= 1' – ellaf

+0

@ellaf我写它采取2个参数(时间戳和它)的元组,你只有1个参数(你的RDD案例类)。所以请尝试用您的案例类替换元组。 – soote