我有一个大型 Mongo 集合,想在我的 Spark 应用程序中使用 Spark Mongo 连接器。该集合相当大(>10 GB)并且包含每日数据,索引为original_item.CreatedDate
场地。在 Mongo 中选择几天的查询非常快(不到一秒)。然而,当我使用数据帧编写相同的查询时,该过滤器不会下推到 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)]
当我通过对该集合的另一个字段进行过滤来进行类似的查询时,mongo 成功地将其向下推送 -PushedFilters: [IsNotNull(original_item), IsNotNull(doc_type), EqualTo(doc_type,case)]
!
难道是这样吗?GreaterThan
Mongo Spark 连接器不支持过滤器推送,或者存在错误?
Thanks!
这不是GreaterThan
这导致了您的问题,因为过滤器位于嵌套字段上。您的过滤器已打开doc_type
有效,因为它不是嵌套的。这显然是 Spark 中 Catalyst 引擎的问题,而不是 Mongo 连接器的问题。它也会影响 Parquet 等中的谓词下推。
有关更多详细信息,请参阅 Spark Jira 中的以下讨论。
火花19638
火花17636
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)