У меня есть большая коллекция Mongo, которую я хочу использовать в своем приложении Spark, используя соединитель Spark Mongo.Коллекция довольно большая (> 10 ГБ) и содержит ежедневные данные с индексом в поле original_item.CreatedDate
.Запросы на выбор пары дней в Монго чрезвычайно быстры (меньше секунды).Однако когда я пишу тот же запрос с использованием фреймов данных, этот фильтр не переносится в Mongo, что приводит к крайне низкой производительности, поскольку Spark, по-видимому, извлекает всю коллекцию и выполняет фильтрацию самостоятельно.
Запрос выглядит следующим образом:
collection
.filter("original_item.CreatedDate > %s" % str(start_date_timestamp_ms)) \
.filter("original_item.CreatedDate < %s" % str(end_date_timestamp_ms)) \
.select(...)
В физическом плане я вижу: PushedFilters: [IsNotNull(original_item)]
Когда я делаю аналогичный запрос с фильтрацией в другом поле этой коллекции, Монго успешно толкает его вниз - PushedFilters: [IsNotNull(original_item), IsNotNull(doc_type), EqualTo(doc_type,case)]
!
Может ли быть так, что GreaterThan
проталкивание фильтра не поддерживается соединителем Mongo Spark, или в этом есть ошибка?
Спасибо!