2
pyspark的「between」功能不包括時間戳輸入。例如,如果我們想要兩個日期之間的所有行,例如'2017-04-13'和'2017-04-14',那麼當日期作爲字符串傳遞時,它會執行「排他性」搜索。即,它省略了「2017年4月14日00:00:00」字段pyspark的「之間」功能:範圍搜索時間戳不包含
然而,該文獻似乎暗示它是包容性([http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html],時間戳沒有參考雖然)
當然,一種方法是從上限增加一個微秒並將其傳遞給該函數。但是,這不是一個很好的解決方案任何干淨的做包容性搜索的方式?
實施例:
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|
+--------------------+-----+
有趣點。但輸出顯示相同。你能詳細說明嗎? – PR102012
以上兩種方法產生包含性搜索(因此輸出相同)。但是,如果我們只是將日期作爲字符串傳遞(請參閱問題),我們將獲得專有搜索。問題的關鍵在於:如果您希望包容性搜索使用上述任一方法,並且不要只使用日期字符串(例如'F.between('2017-04-13','2017-04-14')') –