在pyspark中的两个时间戳之间创建一个时间戳数组
Posted
技术标签:
【中文标题】在pyspark中的两个时间戳之间创建一个时间戳数组【英文标题】:Creating an array of timestamps between two timestamps in pyspark 【发布时间】:2019-12-04 04:11:11 【问题描述】:我的 pyspark 数据框中有两个时间戳列。我想创建第三列,其中包含两个时间戳之间的时间戳小时数组。
这是我为此编写的代码..
# Creating udf function
def getBetweenStamps(st_date, dc_date):
import numpy as np
hr = 0
date_list = []
runnig_date = st_date
while (dc_date>runnig_date):
runnig_date = st_date+timedelta(hours=hr)
date_list.append(runnig_date)
hr+=1
dates = np.array(date_list)
return dates
udf_betweens = F.udf(getBetweenStamps, ArrayType(DateType()))
# Using udf function
orders.withColumn('date_array', udf_betweens(F.col('start_date'), F.col('ICUDischargeDate'))).show()
但是这显示错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我认为函数的输入是作为两个数组而不是作为导致错误的两个日期时间进入的。有没有办法解决?有没有其他办法解决这个问题?
非常感谢。
【问题讨论】:
【参考方案1】:从 udf 返回 numpy 数组时出现错误。您只需返回 date_list
即可。
def getBetweenStamps(st_date, dc_date):
import numpy as np
hr = 0
date_list = []
runnig_date = st_date
while (dc_date>runnig_date):
runnig_date = st_date+timedelta(hours=hr)
date_list.append(runnig_date)
hr+=1
return date_list
udf_betweens = F.udf(getBetweenStamps, ArrayType(DateType()))
测试上述功能:
df = spark.sql("select current_timestamp() as t1").withColumn("t2", col("t1") + expr("INTERVAL 1 DAYS"))
df.withColumn('date_array', udf_betweens(F.col('t1'), F.col('t2'))).show()
【讨论】:
以上是关于在pyspark中的两个时间戳之间创建一个时间戳数组的主要内容,如果未能解决你的问题,请参考以下文章