Apache spark pyspark中两种时间戳类型的差异
使用pyspark,我有一个具有两列Apache spark pyspark中两种时间戳类型的差异,apache-spark,pyspark,Apache Spark,Pyspark,使用pyspark,我有一个具有两列TimestampType的数据帧: df.schema …StructField(会话开始,时间戳类型,true),StructField(会话结束,时间戳类型,true)。。。 但我不知道如何计算差异: df2=df.withColumn(“会话长度”,col(“会话结束”)-col(“会话开始”)) 给我 AnalysisException:u“无法解析”('session\u end`-'session\u start`),因为数据类型不匹配:'(
TimestampType
的数据帧:
df.schema
…StructField(会话开始,时间戳类型,true),StructField(会话结束,时间戳类型,true)。。。
但我不知道如何计算差异:
df2=df.withColumn(“会话长度”,col(“会话结束”)-col(“会话开始”))
给我
AnalysisException:u“无法解析”('session\u end`-'session\u start`),因为数据类型不匹配:'('session\u end`-'session\u start`)需要(数值或日历间隔)类型,而不是时间戳。。。
我还没有找到一个可行的替代方案。(有一个datediff
函数,但它以天为单位返回结果,我需要以秒为单位的差值。)
我该怎么写
编辑:此问题的原始版本由于在我的笔记本中将col
重新用作变量而导致不同的错误。在重新执行import
以获取函数后,我现在获得上面的AnalysisException
您应该用于转换列,然后获取差异:
从pyspark.sql.functions导入unix\u时间戳
df2=df.withColumn(
“会话长度”,
unix_时间戳(“会话_结束”)-unix_时间戳(“会话_开始”)
)
Thatnks——这很有效。我忽略了这一点,因为它说它需要字符串值。TimestampType
真的是一种字符串类型吗,或者它如何知道将其转换为字符串?TBH,我不清楚细节,但可能它试图先进行转换。很难找到pyspark funct的好文档我怎样才能在普通的Spark SQL查询中(因为我在复杂的case语句中使用它)而不是使用函数实现同样的效果呢?我还希望减去的值作为间隔,而不是默认情况下的长值(以秒为单位)。如果你发布一个带有。