pyspark#39;s quot;betweenquot; function: range search on timestamps is not inclusive(pysppark39;squot;BETWEENQUOT;函数:时间戳上的范围搜索不包括在内)
本文介绍了pysppark&39;s";BETWEEN";函数:时间戳上的范围搜索不包括在内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
pyspark的"介于"函数不包含时间戳输入。
例如,如果我们想要两个日期之间的所有行,比如‘2017-04-13’和‘2017-04-14’,那么当日期作为字符串传递时,它会执行"独占"搜索。即省略‘2017-04-14 00:00:00’字段
但是,文档似乎暗示它是inclusive(虽然没有引用时间戳)
当然,一种方法是从上限添加一微秒,并将其传递给函数。然而,这并不是一个很好的解决办法。有没有执行包含式搜索的干净方法?示例:
import pandas as pd
from pyspark.sql import functions as F
... sql_context creation ...
test_pd=pd.DataFrame([{"start":'2017-04-13 12:00:00', "value":1.0},{"start":'2017-04-14 00:00:00', "value":1.1}])
test_df = sql_context.createDataFrame(test_pd).withColumn("start", F.col("start").cast('timestamp'))
test_df.show()
+--------------------+-----+
| start|value|
+--------------------+-----+
|2017-04-13 12:00:...| 1.0|
|2017-04-14 00:00:...| 1.1|
+--------------------+-----+
test_df.filter(F.col("start").between('2017-04-13','2017-04-14')).show()
+--------------------+-----+
| start|value|
+--------------------+-----+
|2017-04-13 12:00:...| 1.0|
+--------------------+-----+
推荐答案
已找到答案。pyspark的"BETWING"函数在处理时间戳输入时不一致。
- 如果您在没有时间的情况下以字符串格式提供输入,它将执行独占搜索(与我们从上面链接的文档中预期的不同)。
- 如果您以DateTime对象或精确时间(例如,‘2017-04-14 00:00:00’)形式提供输入,则它将执行包含性搜索。
对于上面的示例,以下是独占搜索的输出(使用pd.to_datetime):
test_df.filter(F.col("start").between(pd.to_datetime('2017-04-13'),pd.to_datetime('2017-04-14'))).show()
+--------------------+-----+
| start|value|
+--------------------+-----+
|2017-04-13 12:00:...| 1.0|
|2017-04-14 00:00:...| 1.1|
+--------------------+-----+
类似地,如果我们以字符串格式提供日期和时间,它似乎会执行包含式搜索:
test_df.filter(F.col("start").between('2017-04-13 12:00:00','2017-04-14 00:00:00')).show()
+--------------------+-----+
| start|value|
+--------------------+-----+
|2017-04-13 12:00:...| 1.0|
|2017-04-14 00:00:...| 1.1|
+--------------------+-----+
这篇关于pysppark&39;s";BETWEEN";函数:时间戳上的范围搜索不包括在内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:pysppark&39;s";BETWEEN";函数:时间戳上的范围搜索不包括在内
基础教程推荐
猜你喜欢
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
