Можно ли оптимизировать SQL-запрос pyspark с помощью бинарного поиска? - PullRequest
0 голосов
/ 25 февраля 2019

Интересно, как можно использовать бинарный поиск в очень частом запросе кадра данных pyspark, основанном на столбце Timestamp (но может также основываться на двойном столбце).

Например, в пандах,если мы используем отсортированный 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, используя двоичный поиск, чтобы получить логарифмическую сложность?

...