pyspark的'between'函数在时间戳输入上不是包含的。
例如,如果我们想要在两个日期之间获取所有行,比如'2017-04-13'和'2017-04-14',那么当以字符串形式传递日期时,它执行一个“排他性”搜索。也就是说,它省略了'2017-04-14 00:00:00'字段。
然而,文档似乎暗示它是包含的(尽管没有关于时间戳的参考)。
当然,一种方法是从上限添加微秒并将其传递给函数。但这不是一个很好的解决方法。有没有更干净的方法来做包含搜索?
例子:
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|
+--------------------+-----+
F.between('2017-04-13','2017-04-14')
)。 - Vinay Kolar