我想知道如何在基于Timestamp列(但也可能基于双列)的非常频繁的pyspark数据帧查询中利用二进制搜索。
例如在熊猫中,如果我们使用排序的DatetimeIndex,则以下查询(通过索引)将使用二进制搜索,因此其时间复杂度是对数的。
df = df.set_index('DateTime').sort_index()
result = df.loc[start_date : end_date]
在pyspark中,我正在使用此查询来获得相同的结果:
start = start.strftime('%Y-%m-%d %H:%M:%S')
end = end.strftime('%Y-%m-%d %H:%M:%S')
df.createOrReplaceTempView('DataFrame')
result = spark.sql("""SELECT * FROM DataFrame
WHERE (DateTime >= '{}') AND (DateTime < '{}')
ORDER BY DateTime""".format(start, end)).toPandas()
此实现具有线性复杂性,大大增加了每个查询所需的时间。我该如何利用DataTime列上的排序以及二进制搜索来获得对数复杂度?