【问题标题】:Creating an array of timestamps between two timestamps in pyspark在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()

我认为函数的输入是作为两个数组而不是作为导致错误的两个日期时间进入的。有没有办法解决?有没有其他办法解决这个问题?

非常感谢。

【问题讨论】:

    标签: python datetime pyspark user-defined-functions


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      相关资源
      最近更新 更多