如何将间隔类型转换为天(int)?Spark SQL

rbpvctlc  于 2023-01-31  发布在  Apache
关注(0)|答案(1)|浏览(124)

我有以下疑问:在我用spark sql执行的查询中,我没有找到一个函数,让我把以小时为单位的间隔类型转换成天,然后再转换成整数,days_after_order列是可以的,但是我需要改变days_between_order列的数据类型,怎么解决?

test = spark.sql(f'''
SELECT cds, 
id_cl, 
cd_prod, 
dt_em, 
datediff(current_date(),dt_em) as days_after_order,
(dt_em - LAG(dt_em) OVER (PARTITION BY cds, id_cl, cd_prod ORDER BY dt_em)) as days_between_order
FROM data
''')

结果表明:
| 信用违约掉期|标识_cl|cd_产品|日期_em|订购后天数|订单间隔天数|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 十个|1个|小行星58189|2022年1月10日00时00分|二四六|零|
| 十个|1个|小行星78889|2022年5月16日00时00分|一百二十|零|
| 十个|1个|小行星38850|2022年9月11日00时00分|第二章|零|
| 十个|1个|小行星37372|2022年1月23日00时00分|二百三十三|零|
| 十个|1个|小行星43381|2022年1月23日00时00分|二百三十三|零|
| 十个|1个|小行星43381|2022年9月11日00时00分|第二章|五十五点四十四分|
| 十个|1个|小行星1366|2022年1月11日上午00时00分|二百四十五|零|
| 十个|1个|小行星1366|2022年2月26日00时00分|一百九十九|上午十一时零四分|
| 十个|1个|小行星33603|2022年6月27日00时00分|七十八|零|
| 十个|1个|小行星33603|2022年6月27日00时00分|七十八|0秒|
打印模式:

root
 |-- cds: long (nullable = true)
 |-- id_cl: integer (nullable = true)
 |-- cd_prod: integer (nullable = true)
 |-- dt_em: timestamp (nullable = true)
 |-- days_after_order: integer (nullable = true)
 |-- days_between_order: interval (nullable = true)

当我将timestamp列转换为date时,得到的结果如下:
| 信用违约掉期|标识_cl|cd_产品|日期_em|订购后天数|订单间隔天数|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 十个|1个|小行星58189|2022年1月10日00时00分|二四六|零|
| 十个|1个|小行星78889|2022年5月16日00时00分|一百二十|零|
| 十个|1个|小行星38850|2022年9月11日00时00分|第二章|零|
| 十个|1个|小行星37372|2022年1月23日00时00分|二百三十三|零|
| 十个|1个|小行星43381|2022年1月23日00时00分|二百三十三|零|
| 十个|1个|小行星43381|2022年9月11日00时00分|第二章|7个月19天|
| 十个|1个|小行星1366|2022年1月11日上午00时00分|二百四十五|零|
| 十个|1个|小行星1366|2022年2月26日00时00分|一百九十九|1个月15天|
| 十个|1个|小行星33603|2022年6月27日00时00分|七十八|零|
| 十个|1个|小行星33603|2022年6月27日00时00分|七十八|0秒|

iqjalb3h

iqjalb3h1#

将(dt_em - LAG(dt_em))更改为“日期差异(dt_em,LAG(dt_em)”

相关问题