【发布时间】:2017-04-14 01:10:51
【问题描述】:
pyspark 的 'between' 函数不包含时间戳输入。
例如,如果我们想要两个日期之间的所有行,比如“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|
+--------------------+-----+
【问题讨论】:
标签: python datetime range pyspark between