Python 3.x 在PySpark-Python中减去两个日期列

Python 3.x 在PySpark-Python中减去两个日期列,python-3.x,pyspark,pyspark-sql,Python 3.x,Pyspark,Pyspark Sql,我试图在Python中减去PySpark Dataframe中的两列我在做这件事时遇到了很多问题,我将列类型作为时间戳,该列是date1=2011-01-03 13:25:59,我想从其他日期列date2=2011-01-03 13:27:00中减去该列,因此我想从这些数据框列中创建一个单独的timediff列,显示这两列的差异,例如timediff=00:01:01 我怎样才能在PySaprk做到这一点 我尝试了以下代码: #timeDiff = df.withColumn(('timeDif

我试图在Python中减去
PySpark Dataframe
中的两列我在做这件事时遇到了很多问题,我将列类型作为时间戳,该列是
date1=2011-01-03 13:25:59
,我想从其他日期列
date2=2011-01-03 13:27:00
中减去该列,因此我想从这些数据框列中创建一个单独的timediff列,显示这两列的差异,例如
timediff=00:01:01

我怎样才能在PySaprk做到这一点

我尝试了以下代码:

#timeDiff = df.withColumn(('timeDiff', col(df['date2']) - col(df['date1'])))
这个代码不起作用

我试着做这件简单的事:

timeDiff = df['date2'] - df['date1']
这实际上是可行的,但在那之后,我尝试通过下面的代码将这个单独的列添加到MyDataFrame中

df = df.withColumn("Duration", timeDiff)
它有以下错误:

Py4JJavaError: An error occurred while calling o107.withColumn.
: org.apache.spark.sql.AnalysisException: cannot resolve '(`date2` - `date1`)' due to data type mismatch: '(`date2` - `date1`)' requires (numeric or calendarinterval) type, not timestamp;;
任何人都可以用任何其他方法帮助我,或者我如何解决这个错误???

希望这有帮助

从pyspark.sql.functions导入unix\u时间戳
#样本数据
df=sc.parallelize([
['2011-01-03 13:25:59', '2011-01-03 13:27:00'],
['2011-01-03 3:25:59',  '2011-01-03 3:30:00']
]).toDF(('date1','date2'))
timeDiff=(unix_时间戳('date2',“yyyy-MM-dd HH:MM:ss”)-unix_时间戳('date1',“yyy-MM-dd HH:MM:ss”))
df=df.withColumn(“持续时间”,timeDiff)
df.show()
输出为:

+-------------------+-------------------+--------+
|              date1|              date2|Duration|
+-------------------+-------------------+--------+
|2011-01-03 13:25:59|2011-01-03 13:27:00|      61|
| 2011-01-03 3:25:59| 2011-01-03 3:30:00|     241|
+-------------------+-------------------+--------+
希望这有帮助

从pyspark.sql.functions导入unix\u时间戳
#样本数据
df=sc.parallelize([
['2011-01-03 13:25:59', '2011-01-03 13:27:00'],
['2011-01-03 3:25:59',  '2011-01-03 3:30:00']
]).toDF(('date1','date2'))
timeDiff=(unix_时间戳('date2',“yyyy-MM-dd HH:MM:ss”)-unix_时间戳('date1',“yyy-MM-dd HH:MM:ss”))
df=df.withColumn(“持续时间”,timeDiff)
df.show()
输出为:

+-------------------+-------------------+--------+
|              date1|              date2|Duration|
+-------------------+-------------------+--------+
|2011-01-03 13:25:59|2011-01-03 13:27:00|      61|
| 2011-01-03 3:25:59| 2011-01-03 3:30:00|     241|
+-------------------+-------------------+--------+

同意以上答案,谢谢

但我认为可能需要改为:

timeDiff = (unix_timestamp(F.col('date2'), "yyyy-MM-dd HH:mm:ss") - unix_timestamp(F.col('date1'), "yyyy-MM-dd HH:mm:ss"))
给定


同意以上答案,谢谢

但我认为可能需要改为:

timeDiff = (unix_timestamp(F.col('date2'), "yyyy-MM-dd HH:mm:ss") - unix_timestamp(F.col('date1'), "yyyy-MM-dd HH:mm:ss"))
给定