Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 两个约会时间之间的火花/蜂巢时间_Hadoop_Apache Spark_Hive_Pyspark - Fatal编程技术网

Hadoop 两个约会时间之间的火花/蜂巢时间

Hadoop 两个约会时间之间的火花/蜂巢时间,hadoop,apache-spark,hive,pyspark,Hadoop,Apache Spark,Hive,Pyspark,我想知道如何精确地获得spark中两个datetimes之间的小时数 有一个名为datediff的函数,我可以使用它来获取天数,然后将其转换为小时,但这并不像我希望的那样精确 根据datediff建模的示例: >>> df = sqlContext.createDataFrame([('2016-04-18 21:18:18','2016-04-19 19:15:00')], ['d1', 'd2']) >>> df.select(hourdiff(df.d2

我想知道如何精确地获得spark中两个datetimes之间的小时数

有一个名为
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|
+----------------------------+

如果列的类型为
TimestampType()
,则可以使用以下问题的答案:

但是,如果列的类型为
StringType()
,则有一个选项比使用内置的:

从pyspark.sql.functions导入*
diffCol=unix_时间戳(col('d1'),'yyyy-MM-dd HH:MM:ss')-unix_时间戳(col('d2'),'yyyy-MM-dd HH:MM:ss'))
df=sqlContext.createDataFrame([('2016-04-18 21:18:18','2016-04-19 19:15:00'),['d1','d2']))
df2=df.带列('diff_secs',diffCol)