【问题标题】:Filtering After a Specific Date Spark在特定日期 Spark 之后过滤
【发布时间】:2015-08-12 14:31:06
【问题描述】:

我试图在 spark 中的特定日期之后过滤我有以下 RDD,我有一个 2 个字符串的数组,第一个是日期,下一个是路径,我想检查特定日期之后路径的变化:

val cleanRDD = oivRDD.map(x => (x(5), x(7)))

res16: 数组[(字符串, 字符串)] = 大批( (2015-06-24,/), (2015-07-17,/cdh), (2015-06-26,/datameer), (2015-06-24,/devl), (2015-08-11,/dqa), (2015-03-12,/lake), (2015-02-13,/osa))

我正在使用 Java 的 SimpleDateFormt:

val sampleDate = new SimpleDateFormat("yyyy-MM-dd")
val filterRDD = cleanRDD.filter(x => dateCompare(x))

我的日期比较:

  def dateCompare(input:(String, String)): Boolean = {
    val date1 = sampleDate.format(input._1)
    val date2 = sampleDate.parse(date1)
    val date3 = sampleDate.parse("2015-07-01")
    if (date2.compareTo(date3) > 0)  true
    else
      false
  }

我收到以下错误:

15/08/12 10:21:16 WARN TaskSetManager:在阶段 7.0 中丢失任务 0.0(TID 10、edhpdn2128.kdc.capitalone.com): java.lang.IllegalArgumentException:无法将给定的对象格式化为 日期

【问题讨论】:

  • 您正在尝试格式化字符串:sampleDate.format(input._1)
  • 删除这一行应该可以正常工作。
  • 哦哇简单的错误,修复了它!

标签: scala apache-spark


【解决方案1】:

使用新的数据框框架,它是一个有效的表达式,例如:

dfLogging.filter(dfLogging("when") >= "2015-01-01")

该列具有时间戳类型:

scala> dfLogging.printSchema()
root
 |-- id: long (nullable = true)
 |-- when: timestamp (nullable = true)
 |-- ...

此语法对 Scala 有效,但对 Java 和 Pyhton 应该类似

【讨论】:

    猜你喜欢
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2018-08-06
    • 2018-04-13
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多