Apache Spark 如何将秒添加到另一个变量/ Dataframe 中的时间戳值

xghobddn  于 2022-11-30  发布在  Apache
关注(0)|答案(2)|浏览(167)
lv_seconds_back = mv_time_horizon.select(col("max(time_horizon)") * 60).show() 
mv_now          =spark.sql("select from_unixtime(unix_timestamp()) as mv_now")
local_date_time  =mv_now.select(date_format('mv_now', 'HH:mm:ss').alias("local_date_time"))
lv_start         =local_date_time.select(col("local_date_time") - expr("INTERVAL $lv_seconds_back seconds"))

如何减去lv start变量中的秒数
我尝试使用expr(interval seconds),但它不接受变量,而是接受数字。
另外,如果我需要在查询中添加lv_start,该如何操作

mt_cache_fauf_r_2= spark.sql("select mt_cache_fauf_r_temp from mt_cache_fauf_r_temp where RM_ZEITPUNKT>= ${lv_start} & RM_ZEITPUNKT <=  ${lv_end}")

这个不行

w7t8yxp5

w7t8yxp51#

也许您应该删除.show(),以便在lv_seconds_back变量中捕获列。

7cwmlq89

7cwmlq892#

你的第一句话有两个问题。第一个:col("max(time_horizon)")无法工作,因为col函数需要列名。请执行expr("max(time_horizon)")max(col("time_horizon"))。然后,show函数将显示部分 Dataframe ,但不返回任何内容。因此,将show的结果赋给变量没有意义。
如果删除show并使用col调用,则结果是一个 Dataframe ,其中一行包含一个元素。first函数可以获取Row对象,从该对象中可以访问其唯一元素,如下所示:

lv_seconds_back = mv_time_horizon.select(F.expr("max(time_horizon)") * 60).first()[0]

然后,如果要从时间戳中减去该值,请在将其转换为字符串之前执行此操作:

mv_now  = spark.sql(f"select from_unixtime(unix_timestamp() - {lv_seconds_back}) as mv_now")

相关问题