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数据框中两列之间的时间差的主要内容,如果未能解决你的问题,请参考以下文章