Apache spark Spark SQL-用于计算两个日期和时间之间差异的UDF

Apache spark Spark SQL-用于计算两个日期和时间之间差异的UDF,apache-spark,apache-spark-sql,udf,Apache Spark,Apache Spark Sql,Udf,是否有Spark SQL UDF可用于计算两个日期和时间之间的差异?目前(Spark 2.0)没有以小时数计算两个日期之间差异的函数,但有一个用于计算天数差异的函数: def datediff(结束:列,开始:列):列 返回从开始到结束的天数。 自从 1.5.0 参考..目前(Spark 2.0)没有计算两个日期之间小时数差异的函数,但有一个函数可以计算天数差异: def datediff(结束:列,开始:列):列 返回从开始到结束的天数。 自从 1.5.0 参考…我自己创建了一个。事情是这样的

是否有Spark SQL UDF可用于计算两个日期和时间之间的差异?

目前(Spark 2.0)没有以小时数计算两个日期之间差异的函数,但有一个用于计算天数差异的函数:

def datediff(结束:列,开始:列):列 返回从开始到结束的天数。 自从 1.5.0


参考..

目前(Spark 2.0)没有计算两个日期之间小时数差异的函数,但有一个函数可以计算天数差异:

def datediff(结束:列,开始:列):列 返回从开始到结束的天数。 自从 1.5.0


参考…

我自己创建了一个。事情是这样的:-

def time_delta(y,x): 
    from datetime import datetime
    end = datetime.strptime(y, '%Y-%m-%d %H:%M:%S')
    start = datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
    delta = (end-start).total_seconds()
    return int(delta/(60*60*24))
这将接收两个日期y和x,并以天为单位返回结果。我使用以下代码注册它:-

f = udf(time_delta, IntegerType())
sqlContext.udf.register("time_diff", time_delta)
它就像一个符咒。以下是一个例子:-

df = df.withColumn("Duration", f(df.end_date, df.start_date))
df.show()
结果如下:-

Column<unix_timestamp(end_date, %Y-%m-%d %H:%M:%S)>
+---+-------------------+-------------------+-----+----+--------+
| id|           end_date|         start_date|state|city|Duration|
+---+-------------------+-------------------+-----+----+--------+
|  1|2015-10-14 00:00:00|2015-09-14 00:00:00|   CA|  SF|      30|
|  2|2015-10-15 01:00:20|2015-08-14 00:00:00|   CA|  SD|      62|
|  3|2015-10-16 02:30:00|2015-01-14 00:00:00|   NY|  NY|     275|
|  4|2015-10-17 03:00:20|2015-02-14 00:00:00|   NY|  NY|     245|
|  5|2015-10-18 04:30:00|2014-04-14 00:00:00|   CA|  SD|     552|
+---+-------------------+-------------------+-----+----+--------+
结果是:-
我自己创建了一个。事情是这样的:-

def time_delta(y,x): 
    from datetime import datetime
    end = datetime.strptime(y, '%Y-%m-%d %H:%M:%S')
    start = datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
    delta = (end-start).total_seconds()
    return int(delta/(60*60*24))
这将接收两个日期y和x,并以天为单位返回结果。我使用以下代码注册它:-

f = udf(time_delta, IntegerType())
sqlContext.udf.register("time_diff", time_delta)
它就像一个符咒。以下是一个例子:-

df = df.withColumn("Duration", f(df.end_date, df.start_date))
df.show()
结果如下:-

Column<unix_timestamp(end_date, %Y-%m-%d %H:%M:%S)>
+---+-------------------+-------------------+-----+----+--------+
| id|           end_date|         start_date|state|city|Duration|
+---+-------------------+-------------------+-----+----+--------+
|  1|2015-10-14 00:00:00|2015-09-14 00:00:00|   CA|  SF|      30|
|  2|2015-10-15 01:00:20|2015-08-14 00:00:00|   CA|  SD|      62|
|  3|2015-10-16 02:30:00|2015-01-14 00:00:00|   NY|  NY|     275|
|  4|2015-10-17 03:00:20|2015-02-14 00:00:00|   NY|  NY|     245|
|  5|2015-10-18 04:30:00|2014-04-14 00:00:00|   CA|  SD|     552|
+---+-------------------+-------------------+-----+----+--------+
结果是:-

有什么区别?天数?@eliasah:天数还是小时数……有什么区别?天数?@eliasah:天数或小时数。。。