hadoop - 两个日期时间之间的 Spark / hive 时间

标签 hadoop apache-spark hive pyspark

我想知道如何精确地获取2个日期时间之间的小时数。

有一个叫做datediff的函数,我可以用它来获取天数,然后转换为小时,但是这比我想要的精度要低。

我想在datediff之后建模的示例:

>>> df = sqlContext.createDataFrame([('2016-04-18 21:18:18','2016-04-19 19:15:00')], ['d1', 'd2'])
>>> df.select(hourdiff(df.d2, df.d1).alias('diff')).collect()
[Row(diff=22)]

最佳答案

尝试使用UDF这是示例代码,您可以修改为UDF返回所需的粒度。

from pyspark.sql.functions import udf, col
from datetime import datetime, timedelta
from pyspark.sql.types import LongType
def timediff_x():
    def _timediff_x(date1, date2):
        date11 = datetime.strptime(date1, '%Y-%m-%d %H:%M:%S')
        date22 = datetime.strptime(date2, '%Y-%m-%d %H:%M:%S')
        return (date11 - date22).days
    return udf(_timediff_x, LongType())

df = sqlContext.createDataFrame([('2016-04-18 21:18:18','2016-04-25 19:15:00')], ['d1', 'd2'])
df.select(timediff_x()(col("d2"), col("d1"))).show() 

+----------------------------+
|PythonUDF#_timediff_x(d2,d1)|
+----------------------------+
|                           6|
+----------------------------+

关于hadoop - 两个日期时间之间的 Spark / hive 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37171544/

相关文章:

hadoop - 如何在非 Java 客户端中从 HDFS 读取文件

hadoop - 从不同用户的 eclipse 提交 oozie 作业?

hadoop - 如何将本地 Hadoop 配置精确模拟到 GCP Dataproc

hadoop - 在 Pig Latin 中生成计数值

hive - 在 Parquet 数据上使用 Avro 架构动态创建 Hive 外部表

hadoop - 在 Hive 查询状态中返回 OK 但不显示任何记录。

scala - 在 Scala 类定义中使用 `this`

apache-spark - NettyBlockTransferService不遵守spark.blockManager.port配置

scala - Spark2 - LogisticRegression 训练完成,但结果未收敛,因为 : line search failed

ubuntu - hive 卡住查询,可能是什么问题?