【问题标题】:Filtering dataframe spark scala for dates greater than current time过滤大于当前时间的日期的数据帧火花scala
【发布时间】:2020-02-13 16:14:43
【问题描述】:

我在 spark 1.6 中有一个数据框,我想选择所有大于当前时间的行。我正在使用这种格式“yyyy-MM-dd'T'HH:mm:ss.SSS”过滤“time_occurred”列。我想知道实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: scala dataframe apache-spark hadoop apache-spark-sql


    【解决方案1】:

    最好的方法是将字段转换为 timestamp 类型,使用 Regexp_replace 函数替换 'T'

    然后通过current_timestamp函数我们可以过滤掉dataframe中的数据。

    Example:

    Spark-scala-1.6:

    import sqlContext.implicits._
    import org.apache.spark.sql.functions._
    import org.apache.spark.sql.types._
    
    //sample data
    
    val df=sc.parallelize(Seq(("2019-10-17'T'18:30:45.123"),("2019-10-15'T'18:30:45.123"))).toDF("ts")
    
    df.filter(regexp_replace('ts,"'T'"," ").cast("timestamp") > current_timestamp).show(false)
    

    Result:

    +-------------------------+
    |ts                       |
    +-------------------------+
    |2019-10-17'T'18:30:45.123|
    +-------------------------+
    

    如果您需要替换 'T' 来获取 ts 字段的时间戳类型,请使用此方法。

    df.withColumn("ts",regexp_replace('ts,"'T'"," ").cast("timestamp"))
      .filter('ts > current_timestamp).show(false)
    

    Result:

    +-----------------------+
    |ts                     |
    +-----------------------+
    |2019-10-17 18:30:45.123|
    +-----------------------+
    

    结果ts 字段将具有Timestamp 类型。

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 2018-10-27
      • 2019-10-20
      • 2020-08-09
      • 2015-11-06
      • 2023-03-29
      • 1970-01-01
      • 2020-12-04
      • 2018-05-03
      相关资源
      最近更新 更多