Pyspark基于时间差的计算场
我有一张这样的桌子:Pyspark基于时间差的计算场,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有一张这样的桌子: trip_distance | tpep_pickup_datetime | tpep_dropoff_datetime| +-------------+----------------------+----------------------+ 1.5 | 2019-01-01 00:46:40 | 2019-01-01 00:53:20 | trip_distance | tpep_pickup_datetime | tpep_dropoff_
trip_distance | tpep_pickup_datetime | tpep_dropoff_datetime|
+-------------+----------------------+----------------------+
1.5 | 2019-01-01 00:46:40 | 2019-01-01 00:53:20 |
trip_distance | tpep_pickup_datetime | tpep_dropoff_datetime| speed |
+-------------+----------------------+----------------------+-------+
1.5 | 2019-01-01 00:46:40 | 2019-01-01 00:53:20 | 13.5 |
最后,我需要为每一行创建一个speed列,如下所示:
trip_distance | tpep_pickup_datetime | tpep_dropoff_datetime|
+-------------+----------------------+----------------------+
1.5 | 2019-01-01 00:46:40 | 2019-01-01 00:53:20 |
trip_distance | tpep_pickup_datetime | tpep_dropoff_datetime| speed |
+-------------+----------------------+----------------------+-------+
1.5 | 2019-01-01 00:46:40 | 2019-01-01 00:53:20 | 13.5 |
所以这就是我想要达到的目标。我想我应该添加一个interium列来提供帮助,名为trip\u time
,它是对tpep\u dropoff\u datetime
-tpep\u picku\u datetime
的计算。下面是我为实现这一点而做的代码:
df4 = df.withColumn('trip_time', df.tpep_dropoff_datetime - df.tpep_pickup_datetime)
这是一个很好的行程时间列:
trip_distance | tpep_pickup_datetime | tpep_dropoff_datetime| trip_time|
+-------------+----------------------+----------------------+-----------------------+
1.5 | 2019-01-01 00:46:40 | 2019-01-01 00:53:20 | 6 minutes 40 seconds|
但现在我想做“速度”专栏,我想这样做:
df4 = df4.withColumn('speed', (F.col('trip_distance') / F.col('trip_time')))
但这给了我一个错误:
分析异常:由于数据类型不匹配,无法解析“(
行程距离/
行程时间)”:在“(
行程距离/
行程时间)”中存在不同的类型(浮动和间隔)代码>
有更好的方法吗?一个选项是将时间转换为以秒为单位的unix\u时间戳,然后可以进行减法运算,将时间间隔作为整数,可以进一步用于计算速度:
import pyspark.sql.functions as f
df.withColumn('speed', f.col('trip_distance') * 3600 / (
f.unix_timestamp('tpep_dropoff_datetime') - f.unix_timestamp('tpep_pickup_datetime'))
).show()
+-------------+--------------------+---------------------+-----+
|trip_distance|tpep_pickup_datetime|tpep_dropoff_datetime|speed|
+-------------+--------------------+---------------------+-----+
| 1.5| 2019-01-01 00:46:40| 2019-01-01 00:53:20| 13.5|
+-------------+--------------------+---------------------+-----+