pyspark数据框中两列之间的时间差

Posted

技术标签:

【中文标题】pyspark数据框中两列之间的时间差【英文标题】:Time difference between two columns in pyspark dataframe 【发布时间】:2019-03-12 11:47:49 【问题描述】:

我要计算在pyspark两列之间小时的时差。 下面是示例数据框。列是字符串类型(YYYYMMDDHHMMSS)。 P>

time1           time2
20191020051010  20191019051010

要低于输出。这里24表示以小时TIME1和TIME2之间的差。 P>

time1                time2         diff
20191020051010  20191019051010     24

【问题讨论】:

【参考方案1】:

你可以试试

import pyspark.sql.functions as F

df.withColumn(
    'diff',
    (F.unix_timestamp(F.to_timestamp(F.col('time1')))) - 
    (F.unix_timestamp(F.to_timestamp(F.col('time2'))))/F.lit(3600)
)

【讨论】:

但它抛出空值。请注意我使用的是 python 3.6 和 spark 2.7.... 请参考下面我使用的代码 ========================= ================================== mySchema = StructType([StructField("Time1", StringType())\ , StructField("Time2", StringType())]) test_lst = [['20191019051010', '20191020051010']] df1 = spark.createDataFrame(test_lst,schema=mySchema) df1.show() df1.printSchema() df1 = df1 .withColumn('unixTime1',F.unix_timestamp(F.to_timestamp(F.col('Time1'))))\ .withColumn('toTime1',F.to_timestamp(F.col('Time1'))) df1。显示() @NabarunChakraborti 这将起作用 - df = df.withColumn('diff', (F.unix_timestamp('time1', 'yyyyMMddhhmmss') -F.unix_timestamp('time2', 'yyyyMMddhhmmss'))/3600) 我不知道为什么我仍然得到空值。下面是架构 - '|-- Time1: string (nullable = true) |-- Time2: string (nullable = true) |-- diff: double (nullable = true)'

以上是关于pyspark数据框中两列之间的时间差的主要内容,如果未能解决你的问题,请参考以下文章

在 pyspark 数据框中循环遍历两列时将值添加到新列

如何获取数据表中两列之间的数据?

计算Postgresql中两列之间的运行差异

查找DataFrame中两列之间的时间差[重复]

在 pyspark 中比较不同数据框中的两列,分别为 String 和 Array<string> 类型

删除颤振中两列之间的空间