【问题标题】:how to find week difference between two dates如何找到两个日期之间的周差
【发布时间】:2016-11-29 02:47:40
【问题描述】:

我有一个数据框,它在 unixtime 中有两列日期,我想找到这两列之间的周差。 SparkSQL 中有一个weekOfYear UDF,但这仅在两个日期都在同一年时才有用。那我怎样才能找到周差呢?

附言我正在使用 Scala Spark。

【问题讨论】:

  • Spark 的版本是多少?
  • @HZ:考虑接受最佳答案。

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


【解决方案1】:

您可以为此创建自定义 UDF:

scala> val df=sc.parallelize(Seq((1480401142453L,1480399932853L))).toDF("date1","date2")
df: org.apache.spark.sql.DataFrame = [date1: bigint, date2: bigint]

scala> df.show
+-------------+-------------+
|        date1|        date2|
+-------------+-------------+
|1480401142453|1480399932853|
+-------------+-------------+


scala> val udfDateDifference=udf((date1:Long,date2:Long)=>((date1-date2)/(60*60*24*7)).toInt
     | 
     | )
udfDateDifference: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function2>,IntegerType,Some(List(LongType, LongType)))

scala> val resultDF=df.withColumn("dateDiffernece",udfDateDifference(df("date1"),df("date2")))
resultDF: org.apache.spark.sql.DataFrame = [date1: bigint, date2: bigint ... 1 more field]

scala> resultDF.show
+-------------+-------------+--------------+
|        date1|        date2|dateDiffernece|
+-------------+-------------+--------------+
|1480401142453|1480399932853|             2|
+-------------+-------------+--------------+

因此您可以获得不同!

【讨论】:

    【解决方案2】:

    由于您有UNIXTIME 日期格式,我们可以执行此表达式。

    ((date1-date2)/(60*60*24*7)).toInt
    

    编辑: 用例子更新这个答案

       spark.udf.register("weekdiff", (from: Long, to: Long) => ((from - to) / (604800)).toInt)
       //  60*60*24*7 => 604800
       df.withColumn("weekdiff", weekdiff(df("date1_col_name"), df("date2_col_name")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多