2017-04-03 70 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