【问题标题】:Filter RDD by Date joda/scala/spark按日期过滤 RDD joda/scala/spark
【发布时间】:2017-04-04 07:06:29
【问题描述】:

我在 spark 中有一个 RDD,它本质上是 (timestamp, id),其中时间戳是 yyyy/MM/dd HH:mm 形式的 joda DateTime。 RDD 是类的;

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,或者即使这是解决此问题的最佳方法。任何提示将不胜感激。

【问题讨论】:

  • 时间戳是一个字符串,还是一个joda DateTime?
  • @soote 时间戳是一个joda DateTime,我创建的类是这样的; case class rdd(timestamp: org.joda.time.DateTime, id: String)

标签: scala date apache-spark filter jodatime


【解决方案1】:

仅 1 天:

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

一段时间内:

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

【讨论】:

  • 感谢您的帮助!我一直在修改您建议的代码,但我仍然收到错误,主要是; error: wrong number of parameters; expected = 1
  • @ellaf 我写它是为了接受 2 个参数的元组(时间戳和它),你只有 1 个参数(你的 rdd 案例类)。所以尝试用你的案例类替换元组。
猜你喜欢
  • 2015-06-27
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2019-03-07
  • 2022-08-11
  • 1970-01-01
相关资源
最近更新 更多